C++ 为什么省略步骤3中的std::cin?
我不明白,为什么C++ 为什么省略步骤3中的std::cin?,c++,C++,我不明白,为什么cin>>W #包括 #包括 使用名称空间std; int main(int argc,char*argv[]) { 短W=-1; cout我假设,您对在步骤1中输入非数字,然后步骤3似乎不起作用的情况感到困惑 问题是,cin.clear()只清除流的错误标志。错误的输入不会从流中取出,因此下一个cin>>W只会再次读取相同的错误输入 例如,您可以从cin中填充一个字符串,该字符串包含所有内容,也可以使用cin.ignore()忽略输入流中的以下字符 请参阅以获得更详细的解释。我
cin>>W如果我输入的不是数字(即“s”),则省略步骤3中的代码>
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
短W=-1;
cout我假设,您对在步骤1中输入非数字,然后步骤3似乎不起作用的情况感到困惑
问题是,cin.clear()只清除流的错误标志。错误的输入不会从流中取出,因此下一个cin>>W
只会再次读取相同的错误输入
例如,您可以从cin中填充一个字符串,该字符串包含所有内容,也可以使用cin.ignore()
忽略输入流中的以下字符
请参阅以获得更详细的解释。我假设,您对在步骤1中输入非数字,然后步骤3似乎不起作用的情况感到困惑
问题是,cin.clear()只清除流的错误标志。错误的输入不会从流中取出,因此下一个cin>>W
只会再次读取相同的错误输入
例如,您可以从cin中填充一个字符串,该字符串包含所有内容,也可以使用cin.ignore()
忽略输入流中的以下字符
请参阅以获得更详细的解释。我认为这段代码更多地是关于如何使用cin>
和cout notnoop:也许这是horrible,但我想了解它为什么会这样工作,而不是为什么看起来如此可怕。如果它解决了您的问题,请不要忘记接受Steffen的答案。我认为这段代码更多地是关于如何工作的你应该使用cin>
和cout notnoop:也许是horrbile,但我想了解为什么它会这样工作,而不是为什么它看起来那么可怕如果它解决了你的问题,别忘了接受Steffen的答案。问题是我试着把一个/两个cin.ignore()
在if块内部,它似乎不起作用。这就是为什么我对“它到底是如何工作的”感到困惑好的,我明白了,cin.clear();
必须在“cin.ignore()之前59449;
必须在'cin.ignore()'之前,而不是之后..谢谢你的链接..现在我明白了'breaked stream'是什么意思了..现在,帖子可以关闭了
#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;
}