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.";
Run Code Online (Sandbox Code Playgroud)
输入非整数时,循环中断.我觉得像我误解的固有使用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.";
Run Code Online (Sandbox Code Playgroud)
或者你可以进一步简化它:
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.";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20766 次 |
| 最近记录: |