#c
#c
Вопрос:
У меня есть этот код:
string sentence2;
while(getline(cin, sentence2)){
// while there are lines coming in
cout << sentence2 << endl;
}
в VSCode я помещаю свой окончательный ввод в виде пустой строки, нажав клавишу «Enter». Код вернул пустую строку. Почему цикл не завершается вместо этого?
Комментарии:
1. Что именно C Primer говорит в этом отношении? Вполне возможно, что объяснение правильное, но неверно истолковано.
2.
getline
возвращает ссылку на поток, который вы передали ему, и этот поток оценивается как false, если он находится в состоянии ошибки (другими словами, если последнее чтение не удалось). Чтение пустой строки не является ошибкой.3. @KelvinNgure
getline
возвращает, что означает, что код выполняется, но сам цикл while не заканчивается, пока его условие не примет значение false . Как упоминалось в ответе, для потоков это происходит при сбое чтения.getline
Здесь So завершается успешно, и возвращаемое значение принимает значение true, поэтому цикл продолжается.4. @KelvinNgure … и поскольку ответ, похоже, помог решить вашу проблему, не могли бы вы также принять его?
5. @Ted Lyngmo, готово! Я даже не знал, что могу это сделать
Ответ №1:
Вы можете добавить условие, чтобы проверить, что строка не пуста:
string sentence2;
while(getline(cin, sentence2) amp;amp; not sentence2.empty()){
// while there are lines coming in
cout << sentence2 << endl;
}
std::getline
возвращает ссылку на cin
и cin
будет находиться в состоянии сбоя, если он не смог ничего прочитать — но даже для пустой строки требуется успешное чтение (of n
), чтобы не переводить ее в состояние сбоя.
Комментарии:
1. Я годами кодирую C и никогда не знал, что вы можете использовать
not
взаимозаменяемо с!
(я знал о iso646.h в C, но не понимал, что они являются реальными ключевыми словами в C ).2. И все это время я использовал
amp;amp; sentence2.length() != 0
. Мне нравится not empty() .3. @dreamlax я начал использовать
not
, когда из-за моего зрения я начал скучать!
🙂4. @DavidC.Rankin Да, в этой строке есть что-то приятное
not
,empty
что облегчает чтение.