c++中cin.clear()的重要性

11914阅读 4评论2012-08-09 licong0527
分类:C/C++

 在学习C++的用法时,有这样一个简单的问题,却让我对cin.clear()重新认识了。
  题目:
         读取一系列int型数据,将其存入vector对象中,然后使用count()统计某个指定值出现的次数。
  下面是我的程序:

点击(此处)折叠或打开

  1. int
  2. main(void)
  3. {
  4.     int num;
  5.     vector< int >ivec;
  6.           
  7.     while( cin >> num )
  8.          ivec.push_back(num);

  9.     cout << "Please input the number you want to count:"
  10.     cin >> num;

  11.     cout << num << " appears " << count(ivec.begin(), ivec.end(), num) << " times!" << endl;

  12.     return 0;
  13. }
运行结果:
  
   我输入了数据1、2、3,没有输入要查询的数据,然后按下" ctrl + D "就显示出如上的结果。程序将输入数据默认为3--最后一个数据(若输入其他的数据或者更多的数据,都显示最后一个结果),说明系统的输入流中已经有数据存在了,所以,在我们输入数据后,应该把输入流进行clear()。
  修改后的代码:

点击(此处)折叠或打开

  1. ...
  2. while( cin >> num )
  3.     ivec.push_back(num);

  4. cin.clear();

  5. cout << "Please input the number you want to cout:";
  6. cin >> num;
运行结果:

  
  细心的人,可能发现了修改后的运行结果与修改前的结果所占用的行数是不同的,修改前占用了4行,修改后的结果占用了5行。这就说明了问题,修改前的代码运行时,我并没有输入要查询的数据,所以没有按下回车键换行;而修改后的代码输入了要查询的数据,所以进行了换行。

注意:
       如果我们将要查询的数据分配一个新的变量,结果还是一样的。为什么呢?其实,只要输入流中的内容没有改变,任何变量中存放的都是输入流中的内容。
 
   这看似是一个很小的问题,但是如果我们不注意这样细小的问题,很有可能造成程序运行时错误。我自己是从这个很小的问题中,学习到了很多,希望你也是。
           
上一篇:c++中cin.clear()的重要性
下一篇:E: Could not get lock /var/lib/dpkg/lock - open

文章评论