2014-09-12 2 views
-2

В следующем блоке кода я создал документ numbers.txt, который имеет номер 1, написанный на нем, не должен ли эта программа плевать на слово ОК обратно бесконечное количество раз, потому что оно проходит мимо маркера eofФайл ввода вывода C++

while (!sample.eof()) 
{ 
     char ch; 
     sample.get(ch); 
     sample.seekp(-1L, ios::cur); 
     sample >> initialnumber; 
     sample.seekp(2L, ios::cur); 
     cout << "OK"; 

} 
+0

Где вы открываете 'sample'? – tadman

+0

Я уже открыл его в коде выше. Они не являются синтаксическими ошибками, которые я открыл и закрыл файл после завершения. –

+0

Строковое хранилище липкое, оно очищается только при явном запросе, поэтому это происходит только до тех пор, пока он не достигнет первого EOF. С другой стороны, я не уверен, что я действительно понимаю ваш вопрос ... –

ответ

0

Там нет такого понятия, как "EOF маркер" . EOF - это просто условие файла, определенное путем перехода к концу файла или мимо него. Независимо от того, ищете ли вы 1 байт или ищете 100000 байт за конец, не имеет значения: если указатель позиции файла находится за концом, вы находитесь на конце файла или за его пределами.

Ваш код считывает символ, а затем выполняет резервное копирование (по существу, отрицание прочитанного символа). Затем он считывает целое число и пропускает два символа. Это приводит к постоянному перемещению вперед файла (даже если чтение целого не получается). Таким образом, вы в конечном итоге попадете в EOF: здесь нет бесконечного цикла.


В DOS дней, файлы могут содержать 0x1A байты («ASCII EOF»), который может вызвать определенные текстовые читатель, чтобы остановить в этих байтах. Содержимое файла может физически выходить за пределы этого байта, но текстовые утилиты могут отказаться от чтения. Однако стандартные библиотеки C++ обрабатывают 0x1A, как и любой другой символ, и будут счастливо читать его.

+0

OK, что имеет смысл, это то, что я изначально хотя, но мой профессор и этот другой парень на этом сайте полностью противоречили всему, что я читал. –

+0

Если вы имеете в виду Ульриха, он не пытается что-либо противоречить. Он говорит о другой проблеме и был сбит с толку, потому что ваш вопрос был неясным. – nneonneo

+0

Но я сделал другую программу, которая следует аналогичной логике, и она делает совершенно противоположную вещь, и это время следует в бесконечном цикле. –

Смежные вопросы