换行符留在cin.get()缓冲区中

时间:2014-07-31 14:48:45

标签: c++ cin

我在代码中使用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;
}

1 个答案:

答案 0 :(得分:0)

如果我理解正确,这个问题是有时为了让代码移过cin,并获得输入的分配,需要两个新的行字符。如果这是正确的,那么比你更换:

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

用这个:

cin >> input;

问题将得到解决。