cin.get()缓冲区中的左换行字符

newline character left in the cin.get() buffer

本文关键字:换行 字符 缓冲区 get cin      更新时间:2023-10-16

我在我的代码中使用cin.get(input).ignore(INT_MAX, 'n');。在while循环中调用该语句以选择菜单中的一个选项。虽然我使用忽略链接cin.get()为我正在读取的每个输入,有时一个换行符仍然在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;

问题会解决的