为什么在while(cin)循环之后跳过第二个cin失败?

时间:2019-10-06 23:15:17

标签: c++ iostream cin

此代码使用while(cin>>x)循环获取一系列整数。

在每次迭代中将变量x推回vector<int> ivec

循环应在非整数输入处退出。

之后,我想再获得一个整数cin>>y来检查其频率。在向量内部。

代码:

cout << "Enter a sequence of integers separated with a space: " << flush;
vector<int> ivec;
int x = 0, y = 0;
while( (cin>>x) && (cin.good()) )
{
    ivec.push_back(x);
}

cin.clear();

cout << "Enter an integer to count it's frequency: "<< endl;
cin>>y;

cout << "Y: " <<y<< " X: "<<x << endl;
cout << "Occurred "<< count(ivec.cbegin(), ivec.cend(), y)<< " times."<< endl;

for( int i : ivec)
{
    cout << " "<<i << flush;
}
cout << endl;

问题:

当我输入一系列整数并且最后一个字符是eof时,退出while循环,并且第二个cin>>y永远不会执行。 但是程序的其余部分正常执行。只能再执行cin条语句。

执行第二个cin的唯一情况是:如果我输入一系列用空格分隔的整数,请按回车键,然后在一行上单独键入eof(^ Z)。我不知道为什么会这样呢?

我尝试过的事情:

我尝试了cin.clear(),但无法解决问题。

我还在while循环之前使用了auto stat = cin.rdstate(),在循环之后仍然使用了cin.setstate(stat),而第二个cin却从未执行。

屏幕截图: ScreenShot

我知道cin会忽略空格,制表符和换行符,那么为什么换行会有所作为?

我想问一下cin是如何工作的,为什么它会如此运作。我知道我可以使用getline()。

0 个答案:

没有答案