Я читаю книгу «Ускоренный C ++», и я не могу воспроизвести результаты, связанные с проблемой чтения домашнего задания, даже после точного копирования их кода на моей машине. Основная проблема c заключается в использовании cin.clear () для изменения состояния отказа потока ввода после использования EOF, чтобы указать, что все оценки были введены. Авторы предлагают Ctrl + D на linux системах для EOF. Я уже видел это и это , но они не смогли решить мою проблему.
Вот мой минимальный рабочий пример:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string name, city;
vector<double> homework;
cout << "Enter your name : " ;
cin >> name;
cout << "Hello " + name + "!" << endl;
cout << endl;
cout << "Enter your grades" << endl;
if (cin)
{
homework.clear();
double x;
while (cin >> x)
{
homework.push_back(x);
}
cin.clear();
}
cout << endl;
cout << "Enter your city : " ;
cin >> city ;
cout << "You live in " + city << endl;;
return 0;
}
После ввода всей домашней работы я нажимаю Ctrl + D, и тогда я ожидаю, что мне теперь будет предоставлена возможность ввести название города. Но программа просто заканчивается после печати двух строк в конце моего кода. Что не так с моим пониманием cin.clear()
? Я также хотел бы отметить, что использование cin.ignore()
после cin.clear()
также не помогает.