C++ 新手。在处理错误时出现正确循环的问题。我正在尝试检查用户输入是否为整数且为正数。
do{
cout << "Please enter an integer.";
cin >> n;
if (cin.good())
{
if (n < 0) {cout << "Negative.";}
else {cout << "Positive.";}
}
else
{
cout << "Not an integer.";
cin.clear();
cin.ignore();
}
}while (!cin.good() || n < 0);
cout << "\ndone.";
当输入非整数时,循环中断。我觉得我误解了 cin.clear()
和 cin.ignore()
的固有用法以及 cin
在这个循环中的状态.如果我删除 cin.ignore()
,循环将变为无限循环。为什么是这样?我该怎么做才能使它成为一个功能优雅的循环?谢谢。
最佳答案
在您的非整数分支中,您将进一步调用 cin
方法,以便 cin.good()
重置为 true。
您可以将代码更改为如下内容:
while(1) { // <<< loop "forever"
cout << "Please enter an integer.";
cin >> n;
if (cin.good())
{
if (n < 0) {cout << "Negative.";}
else { cout << "Positive."; break; }
} // ^^^^^ break out of loop only if valid +ve integer
else
{
cout << "Not an integer.";
cin.clear();
cin.ignore(INT_MAX, '\n'); // NB: preferred method for flushing cin
}
}
cout << "\ndone.";
或者您可以像这样进一步简化它:
while (!(cin >> n) || n < 0) // <<< note use of "short circuit" logical operation here
{
cout << "Bad input - try again: ";
cin.clear();
cin.ignore(INT_MAX, '\n'); // NB: preferred method for flushing cin
}
cout << "\ndone.";
关于C++ 检查整数。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18567483/