我在代码中使用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;
}
答案 0 :(得分:0)
如果我理解正确,这个问题是有时为了让代码移过cin,并获得输入的分配,需要两个新的行字符。如果这是正确的,那么比你更换:
cin.get(input).ignore(INT_MAX, '\n');
用这个:
cin >> input;
问题将得到解决。