none
一个关于cin缓冲区的问题... RRS feed

  • 问题

  • #include<vector>
    #include<algorithm>
    #include<iostream>
    using std::cin;
    using std::cout;
    using std::endl;
    using std::vector;
    using std::domain_error;
    
    int main( )
    {
      cout<<"请输入数据!(Ctrl + Z to )"<< endl;
      double x = 0;
      vector<double> data;
      while (cin >> x)
      {
        data.push_back(x);
      }
      cin.clear( );
      int n = 0;
      if (data.size( ) == 0 )
      {
        throw domain_error("数据不能为空!");
      }
      else
      {
        double number = 0.0;
        cout <<"请输入你要找的数!" << endl;
        cin >> number;
        for (int i=0 ; i != data.size( ) ; ++i)
        {
          if (number == data[i])
          {
            n++;
          }
        }
        if (n==0)
        {
          cout<<"没有你要找的数"<<endl;
        }
        else
        {
        cout<< number<< "有" << n << "个" << endl;
        }
      }
      system ("Pause");
      return 0;
    }
    为什么不用^Z结束,第二个cin会被跳过.while后面不是加了cin.clear()了吗?实际应该是无论用任何字符结束循环后缓冲区都出在清空状态吗?但实际告诉我必须用^Z来结束...希望能得到结束..谢谢
    

    血色的夜晚...充斥着悲伤与优雅...高贵的血族在这一刻绽放...
    2010年8月30日 15:18

答案

  • 您好,

    cin.clear() 只是更改cin的状态标示符,并没有清除缓冲区,而一般输入是以回车为结束(转化为换行符'\n'),所以cin.clear()并没有起作用。

    应该加上在cin.sync(); 或 fflush(stdin); 与cin.clear() 一起使用。

     

    2010年9月1日 2:33
    版主

全部回复

  • 您好,

    cin.clear() 只是更改cin的状态标示符,并没有清除缓冲区,而一般输入是以回车为结束(转化为换行符'\n'),所以cin.clear()并没有起作用。

    应该加上在cin.sync(); 或 fflush(stdin); 与cin.clear() 一起使用。

     

    2010年9月1日 2:33
    版主
  • 动了,谢谢.


    血色的夜晚...充斥着宁静与优雅...高贵的血族在这一刻绽放...
    2010年9月4日 15:35