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

#包括
#包括
使用名称空间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;
}