Cin, cin.get и вещь, которую я не могу понять - PullRequest
0 голосов
/ 02 апреля 2020

Правильно ли, что я могу написать цикл, подобный этому

char temp;
while(cin.get(temp)) {
...
}

И он остановится, когда во входном потоке нет символов, и не будет выполняться, если поток пуст? Ну, я знаю, что это неправда, b c, когда я пытаюсь - это работает так же, как cin >> temp. Тогда откуда мне знать, что поток пуст и этот цикл должен быть остановлен?

1 Ответ

5 голосов
/ 02 апреля 2020

Перегрузка get, которую вы используете , возвращает ссылку на объект потока.

Классы потока имеют оператор логического преобразования , который возвращает false в случае ошибки или конец файла .

Поэтому, если вы нажмете последовательность клавиш конца файла ( Ctrl-D в таких системах POSIX, как Linux или macOS, или Ctrl-Z в новой строке на Windows), тогда это будет распространяться до потока, и условие l oop станет false, а l oop end.

Если вы хотите завершить l oop указанным символом c, скажем, новой строкой, то вам нужно добавить его в условии:

while (cin.get(temp) && temp != '\n')
...