簡體   English   中英

C++ getline function 連續循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM