[英]C++ getline function continuous loop
我試圖在下面的代碼中使用 getline function,但是它只是進入了一個無限循環。 如果我輸入 1,它將跳轉到循環的另一個迭代並再次詢問我的菜單選擇,而不是詢問我的名字。
有誰知道我哪里出錯了?
#include <iostream>
#include <string>
#include <ncurses.h>
using namespace std;
// DECLARE
void menu();
void menu_act_on_choice();
void string_function();
// CODE
void menu_act_on_choice(int choice_in) {
switch (choice_in) {
case 1:
string_function();
break;
default:
break;
}
}
void string_function() {
string user;
cout << "Enter your first and last: ";
getline(cin, user);
cout << user << endl;
}
void menu() {
int choice = 0;
do {
cout << "1. String functions" << endl;
cout << "2. Array functions" << endl;
cout << "3. Exit" << endl;
cout << "Enter choice: ";
cin >> choice;
menu_act_on_choice(choice);
} while(choice != 3);
}
//EXECUTE
int main() {
menu();
}
當您輸入菜單選項時,由
cin >> choice;
你用Enter鍵結束了,對吧?
該Enter鍵將作為換行符添加到輸入緩沖區。 但是cin >> choice
不會讀取它,而是發生在getline
調用中,它將它讀取為空行。
簡單的解決方案是在獲得菜單選項后忽略所有輸入,直到(包括)換行符。
cin >> choice;
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
添加cin.ignore();
在 getline 線之前。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.