Поясните как работает данный оператор?
Не могу понять работу оператора while. По моей логике inFile >> count возвращает объект inFile, который затем используется с функцией get(). После чего InFile.get() считывает символ оставшейся перевода строки и сравнивает с символом. Суть такова, что inFile - это объект для чтения с файла(аналог cin). В файле первая строка состоит из цифр и в конце строки символ перевода строки. Почему данный цикл не выполняется ни разу. Меня больше всего интересует как работает этот оператор - его логику. Я просто хочу понять ошибку.
ifstream inFile;
inFile.open(filename);
int count;
while (((inFile >> count).get()) != '\n')
cout << count;
Ответы (1 шт):
"Да понять-то его, надежа-государь, не трудно" © Дьяк Феофан :)
Если все-все правильно. Т.е. в файле в строке число и перевод строки...
После (inFile >> count)
читает очередной символ .get()
. Он равен \n
. Сравниваем с \n
. Равны? Конечно! А условие? неравенство.. Значит, условие в цикле ложно, и выходим из цикла, не выполняя его тело...
Продолжать?
Представим, что у вас... ну, 123+\n
. Тогда прочли 123, символ +
, неравенство выполнено, вывели число, отправились на новое выполнение цикла - если там у вас в следующей строке число, значит, повторяем действия. Если нет - inFile
переходит в состояние fail, и больше никаких чтений...
А если файла нет? Не открылся? Чтения не будет, ни одного, ни другого. Вернее, второе чтение вернет eof
, не равное \n
, так что цикл выведет значение в count
- случайное, и продолжит делать то же самое, пока его не остановят...
Все прочие неприятности рассматриваются аналогично...
Типа наброска на псевдокоде, как работает
while ( condition ) statement;
Вот так:
start:
if condition == true then
statement;
goto start;
endif
quit: