为什么省略步骤3中的std :: cin?

时间:2010-01-06 12:59:15

标签: c++

我不明白,如果我输入的不是数字(即'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;
}

1 个答案:

答案 0 :(得分:3)

我假设,你对第1步输入非数字的情况感到困惑,然后第3步似乎不起作用。

问题是,cin.clear()只清除流的错误标志。错误的输入不会从流中取出,因此下一个cin >> W只会再次读取相同的错误输入。

例如,您可以从cin填充一个字符串,它可以使用cin.ignore()来忽略输入流中的以下字符。

有关更详细的说明,请参阅http://www.arachnoid.com/cpptutor/student1.html