Здравствуйте, Nikita.Trophimov, Вы писали:
NT>Он устанавливается только тогда, когда Вы попытаетесь прочитать уже не существующие данные, а не закончите читать последнюю переменную.
Я тоже так думал, но почему в первом случае цикл отрабатывает нормально? Т.е. считалась последняя цифра и условие f.eof() тут же стало истинным.
Здравствуйте, neocpp, Вы писали:
N>Здравствуйте, Nikita.Trophimov, Вы писали:
NT>>Он устанавливается только тогда, когда Вы попытаетесь прочитать уже не существующие данные, а не закончите читать последнюю переменную.
N>Я тоже так думал, но почему в первом случае цикл отрабатывает нормально? Т.е. считалась последняя цифра и условие f.eof() тут же стало истинным.
Думаю, потому, что считываются не цифры, а числа, и считывание последнего числа заканчивается в момент. когда в файл закончился. Попробуй после 4 в исходном файле пробел поставить, по идее поведение станет одинаковым с вариантом char
Здравствуйте, Marty, Вы писали:
M>Думаю, потому, что считываются не цифры, а числа, и считывание последнего числа заканчивается в момент. когда в файл закончился. Попробуй после 4 в исходном файле пробел поставить, по идее поведение станет одинаковым с вариантом char
Да, с пробелом работает аналогично char. Только я не пойму почему так? И все еще не могу понять, в какой именно момент устанавливается eofbit?
Предположение: он устанавливается после последнего успешного чтения, а при последующей попытке чтения устанавливается failbit. Почему тогда в случае char eofbit устанавливается позже? То есть уже после неудачной попытки чтения.
Здравствуйте, neocpp, Вы писали:
M>>Думаю, потому, что считываются не цифры, а числа, и считывание последнего числа заканчивается в момент. когда в файл закончился. Попробуй после 4 в исходном файле пробел поставить, по идее поведение станет одинаковым с вариантом char
N>Да, с пробелом работает аналогично char. Только я не пойму почему так? И все еще не могу понять, в какой именно момент устанавливается eofbit?
N>Предположение: он устанавливается после последнего успешного чтения, а при последующей попытке чтения устанавливается failbit. Почему тогда в случае char eofbit устанавливается позже? То есть уже после неудачной попытки чтения.
А если еще немного подумать?
eofbit — признак того, что достигнут конец файла.
failbit — признак того, что произошла ошибка ввода-вывода, к твому вопросу, думаю, он не имеет отношения.
При чтении int'а что происходит? Считываются символы до пробельного или до конца файла, считанные символы преобразовываются в int. Поэтому при добавлении пробела поведение изменилось — последнее (четвертое) число считано, ввод остановился, конец файла не достинут. Если нет пробела, ввод останавливается при достижении конца файла, в этот момент устанавливается eofbit. При каждом чтении int'а может быть считано от 0 до N байт. При чтении посимвольно четыре раза считывается по одному байту (символу), при этом до конца файла еще не дошли. При попытке чтения пятого символа обнаруживается, что достигнут конец файла и только в этот устанавливается eofbit.
Здравствуйте, Marty, Вы писали:
N>>Предположение: он устанавливается после последнего успешного чтения, а при последующей попытке чтения устанавливается failbit. Почему тогда в случае char eofbit устанавливается позже? То есть уже после неудачной попытки чтения.
M>А если еще немного подумать? M>eofbit — признак того, что достигнут конец файла. M>failbit — признак того, что произошла ошибка ввода-вывода, к твому вопросу, думаю, он не имеет отношения.
Имеет. Когда читается поток ввода при вводе int, то failbit устанавливается при обнаружении символа,
не соответствующего символам целого числа, то есть — не цифре.
При обнаружении пробела после числа он и устанавливается.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!