Этот код получает последовательность целых чисел, используя цикл 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()
, это не решает проблему.
Также я использовал auto stat = cin.rdstate()
до цикла while и cin.setstate(stat)
после цикла, пока второй cin
никогда не выполняется.
ScreenShot:
Я знаю cin
игнорирует пробел, табуляцию и новую строку, так почему новая строка имеет значение?
Я спрашиваю, как работает cin и почему еговести себя таким образом. Я знаю, что могу использовать getline ().