Я просто работаю над книгой Ускоренный C ++.(Моя проблема находится на стр. 57, если у вас, ребята, есть книга с вами)
Проблема в следующем: у нас есть функция, которая читает оценки учеников:
...
while (in >> x) { // in and x are defined as an istream& and as a double
hw.push_back(x); // hw is vector defined as vector<double>&
}
in.clear();
...
СейчасВ книге, а также на cplusplus.com указано, что функция clear сбрасывает все состояния ошибок и что вход снова готов для чтения некоторого ввода.Проблема в том, что если я поставлю:
int a = 0;
cin >> a;
cout << a << endl;
после функции, то она перескочит cin и просто выдаст мне 0. Понял ли я функцию cin.clear () совершенно неправильно или что я могу сделатьчтобы снова активировать cin.
Поскольку до того, как я прочитал книгу, у меня возникла та же проблема, я знаю, что тогда решил эту проблему со следующей строкой:
cin.ignore( numeric_limits<streamsize>::max(), '\n');
Конечно, мне тогда приходится нажимать дополнительную клавишу ввода, но она съедает все то, что было раньше, и это заставляет cin не работать.
Дело в том, что ни .clear, ни .ignore не работают должным образом, но используютони оба вместе, я могу ввести что-то для переменной а;
РЕДАКТИРОВАТЬ: Хорошо, вот весь код.Это то, что я написал сам, чего нет в книге.
istream& in = cin;
int var = 0;
vector<int> vec;
while ( in >> var ) {
vec.push_back(var);
}
for (int f = 0; f < vec.size(); ++f) {
cout << vec[f] << endl;
}
cin.clear();
cout << "cleared" << endl;
int a = 0;
cin >> a;
cout << a << endl;