Поясните как работает данный оператор?

Не могу понять работу оператора while. По моей логике inFile >> count возвращает объект inFile, который затем используется с функцией get(). После чего InFile.get() считывает символ оставшейся перевода строки и сравнивает с символом. Суть такова, что inFile - это объект для чтения с файла(аналог cin). В файле первая строка состоит из цифр и в конце строки символ перевода строки. Почему данный цикл не выполняется ни разу. Меня больше всего интересует как работает этот оператор - его логику. Я просто хочу понять ошибку.

    ifstream inFile;
    inFile.open(filename);
    int count;
    while (((inFile >> count).get()) != '\n')
    cout << count;

Ответы (1 шт):

Автор решения: Harry

"Да понять-то его, надежа-государь, не трудно" © Дьяк Феофан :)

Если все-все правильно. Т.е. в файле в строке число и перевод строки...

После (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:
→ Ссылка