Моя программа должна создать простой список: name (string), rating (int), watched/unatched (string). Понимаю, что с помощью std::cin>>
уходит '\n'
в конце, поэтому я должен использовать cin.ignore()
, но, похоже, он каким-то образом не работает.Использование cin AFTER getline (cin, string)
void write()
{
int rating;
string name, watch, wprint;
cout << "Modifying" << endl;
f_list.open ("TextFile.txt", ios::app);
cout << "Name/Title?" << endl;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
getline(cin, name);
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Rating?" << endl;
if (!(cin >> rating));
{
cin.clear();
cout << "Error again" << endl;
}
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Watched or unwatched?" << endl;
getline(cin, watch);
cin.ignore(numeric_limits<streamsize>::max(), '\n');
if (watch == "w" || watch == "yes" || watch == "y")
{
watch = "W";
wprint = "Watched";
}
else
{
watch = "DW";
wprint = "Didn't watch";
}
cout << name << " (" << rating << "/10) (" << wprint << ") has been added to the list" << endl;
f_list << name << " " << rating << " " << watch << endl;
}
Первый мой cin >> rating
всегда ноль не было, независимо от того, что я сделал, и он также вернулся ошибки и пошел в бесконечном цикле. Затем я НЕОБХОДИЛ исправление, но я не знаю, как и теперь мои 2 getline()
s нужно ввести ДВАЖДЫ!
Может ли кто-нибудь объяснить, почему это не работает для меня? И какие части этого кода не нужны?
'std :: getline' не оставляет' \ n' в буфере, форматированное извлечение делает! Вы очищаете ввод. – LogicStuff
... Q & A вы опасались, что ваш вопрос помечен как дубликат, не говорит, что вызывается 'std :: istream :: ignore' между каждым извлечением. – LogicStuff