Там нет такого понятия, как "EOF маркер" . EOF - это просто условие файла, определенное путем перехода к концу файла или мимо него. Независимо от того, ищете ли вы 1 байт или ищете 100000 байт за конец, не имеет значения: если указатель позиции файла находится за концом, вы находитесь на конце файла или за его пределами.
Ваш код считывает символ, а затем выполняет резервное копирование (по существу, отрицание прочитанного символа). Затем он считывает целое число и пропускает два символа. Это приводит к постоянному перемещению вперед файла (даже если чтение целого не получается). Таким образом, вы в конечном итоге попадете в EOF: здесь нет бесконечного цикла.
В DOS дней, файлы могут содержать 0x1A байты («ASCII EOF»), который может вызвать определенные текстовые читатель, чтобы остановить в этих байтах. Содержимое файла может физически выходить за пределы этого байта, но текстовые утилиты могут отказаться от чтения. Однако стандартные библиотеки C++ обрабатывают 0x1A, как и любой другой символ, и будут счастливо читать его.
Где вы открываете 'sample'? – tadman
Я уже открыл его в коде выше. Они не являются синтаксическими ошибками, которые я открыл и закрыл файл после завершения. –
Строковое хранилище липкое, оно очищается только при явном запросе, поэтому это происходит только до тех пор, пока он не достигнет первого EOF. С другой стороны, я не уверен, что я действительно понимаю ваш вопрос ... –