簡體   English   中英

cin.get()緩沖區中剩余的換行符

[英]newline character left in the cin.get() buffer

我正在使用cin.get(input).ignore(INT_MAX, '\\n'); 在我的代碼中。 該語句在while循環中被調用,以在菜單中選擇一個選項。 盡管我對每次讀入的輸入都使用與cin.get()鏈接的ignore,但是有時在cin緩沖區中會保留換行符,我應該按一個額外的“ Enter”進入while循環的常規過程以進行選擇一個選項。 我該怎么做才能解決這個問題?

int Menu::getChoice(int menuNum)    // getChoice() returns users menu choice
{
    int i = 0;
    char input;
    while(0 == i)       // As long as users choice not valid
    {
        cout << "Make your choice: ";
        cin.get(input).ignore(INT_MAX, '\n');
        if (!cin.good())
        {
            cin.clear();                    
            cin.ignore(INT_MAX, '\n');  
        }
        i = atoi(&input);
        if (menuNum == 1)
        {
            if (i < 1 || i > 2)
            {
                cout << "Not a valid choice!" << endl;
                i = 0;
            }
        }
    }
    return i;
}

如果我理解正確,那么這個問題是,有時為了使代碼能夠通過cin,並獲得輸入的賦值,需要兩個換行符。 如果這是正確的,則與您更換以下產品相比:

cin.get(input).ignore(INT_MAX, '\n');

有了這個:

cin >> input;

該問題將得到解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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