知道为什么会这样吗?
void askNQ(int &noq)
{
bool x = true;
while (x)
{
int i;
cout << "How many questions would you like(out of " << noq << ")?" << endl;
cin >> i;
if (cin.fail())
{
cin.clear();
cin.ignore();
cout << "Sorry, that is not valid." << endl;
x = true;
}
else if (i > noq)
{
cout << "Sorry, that is too many." << endl;
x = true;
}
else if (i <= 0)
{
cout << "Sorry, that is too less." << endl;
x= true;
}
}
}
答案 0 :(得分:1)
cin.ignore();
实际上是对cin.ignore(1, char_traits<char>::eof());
的调用。
因此,您不会从任何剩余的换行符中清除缓冲区。
以下内容应解决您的问题:
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
它清除下一个换行符,无论它在缓冲区中有多远(出于所有实际目的)。
答案 1 :(得分:0)
您应该在命令行中输入numeric,因为变量“i”是整数。