此代码使用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
却从未执行。
我知道cin
会忽略空格,制表符和换行符,那么为什么换行会有所作为?
我想问一下cin是如何工作的,为什么它会如此运作。我知道我可以使用getline()。