我刚刚完成了计算机科学课程的第一个c ++程序,我陷入了两难境地。问题出在while循环语句中,它是这样的:
int main()
{
int answer;
while(!(std::cin >> answer)) // runs until number is read
{
std::cin.clear();
std::cin.ignore();
std::cin >> answer;
}
// rest of code
return 0;
}
基本上在命令提示符下,我得到了这种不良行为:
用户输入:
q
5
6
我的程序应该在读取前5个(第一个数字)时结束,但它没有,它会提示我再次输入以使其工作。
答案 0 :(得分:5)
您不需要while
循环中的行来读取该数字。当你拥有它时,它会在成功读取5
后期待另一个数字。
while(!(std::cin >> answer))
{
std::cin.clear();
std::cin.ignore();
// Remove this line.
// std::cin >> answer;
}
<强>更新强>
一种更简洁的方式来处理EOF,并且在遇到错误输入时忽略其余行,而不是忽略一个字符。
#include <iostream>
#include <limits>
int main()
{
int answer;
while(!(std::cin >> answer)) // runs until number is read
{
if ( std::cin.eof() )
{
std::cout << "Got to the end of input stream before a reading number\n";
return -1;
}
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
std::cout << "Got " << answer << std::endl;
return 0;
}