我不明白,如果我输入的不是数字(即's'),为什么在步骤3中省略cin >> W;
。
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
short W = -1;
cout << "step 1) W = " << W << endl;
cout << "give a number: ";
cin >> W;
if ( cin.fail() )
{
cout << "ERROR, bad number" << endl;
W = -1;
cout << endl << "step 2) W == " << W << endl;
cin.clear();
}
cout << endl << "step 3) W == " << W << endl;
cout << "give a number: ";
cin >> W;
cout << endl << "step 4) W == " << W << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
答案 0 :(得分:3)
我假设,你对第1步输入非数字的情况感到困惑,然后第3步似乎不起作用。
问题是,cin.clear()只清除流的错误标志。错误的输入不会从流中取出,因此下一个cin >> W
只会再次读取相同的错误输入。
例如,您可以从cin填充一个字符串,它可以使用cin.ignore()
来忽略输入流中的以下字符。
有关更详细的说明,请参阅http://www.arachnoid.com/cpptutor/student1.html。