为什么此代码在正确的整数输入上运行两次?在第一个输入整数上,它再次要求输入然后退出正确的输入。是否存在与cin范围相关的内容?
#include <iostream>
using namespace std;
int main()
{
int q1 = 1;
do
{
cin.clear();
cin.ignore();
cin >> q1;
}
while(cin.fail());
return 0;
}
答案 0 :(得分:1)
在第一次迭代中,cin.ignore();
表示将忽略第一个字符。单步执行调试器会向您显示cin.ignore()
实际阻塞,直到您提供输入。如果您的输入是单个数字int
,则该值将被忽略。然后,std::cin
将等到你给出另一个值。在这种情况下,循环只执行一次,但是你必须提供两个值,所以看起来它执行了两次。
解决方案是仅在出现错误时忽略。你也应该忽略整个输入行cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
,而不仅仅是ignore
一个字符。请尝试以下方法:
#include <ios>
#include <iostream>
#include <limits>
int main()
{
int q1 = 1;
std::cin >> q1;
while (std::cin.fail()){
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin >> q1;
}
std::cout << q1;
return 0;
}