EOF в языке C

nnip

Отцы, вспоможите мне темному.
Прога на C.
Надо считать из файла данные. Написал я некую хрень, которая их считывает. Тока одна загвоздка. Не пойму никак, как сказать проге, чтобы она угомонилась и перестала считывать дойдя до конца файла. Пробовал писать цикл с условием "while ( bla != EOF)", где bla - некая переменная типа char. Однако ж не помогает. Если вместо EOF поставить какой то другой символ, то все считывется как надо, тока до этого символа. Но ясен пень, что мне надобно, чтобы именно до конца и не советуйте мне посчитать строчки и написать соответствующий for.

kon7760

а разве не было функции наподобие eof( file) ?
которая проверяет, на конце ли стоит file

ramses1971

feof(FILE*)
Еще можно проверять значение fscanf, fread или чего ты там используешь.

nnip

так, вот как выглядит мое считывание из файла:
FILE *f;
f = fopen("D:/......", "r");
while (bla != EOF) {
fscanf(f, "%c", &bla);
printf("%c ", bla); //поглядеть чего считал
}
Вот это безобразие доходит до последнего символа и начинает до одури его выводить.

nozanin

while (feof(f...
или
!feof, лень проверять

koroleff

второе

Denverus

fscanf(f, "%c", &bla);

реально конкретный изврат IMHO.
bla = fgetc(f);
И, кстати, такой вариант будет возвращать в bla значение EOF в конце файла.

stm5973838

Просто у тебя char когда считывается получает значения чара .. define EOF 0xffffffff
unsigned int readchar;
readchar=fgetc(file);
иначе полная херня будет получаться

yurimedvedev

такой вариант не проходит в общем случае.
Например, вам надо как-то обработать данные из файла, найти, скажем, среднее значение.
Если мы напишем


sum=0;
num=0;
while (bla != EOF) {
fscanf(f, "%c", &bla);
sum += bla;
num++;
}


То, в результате, получим на единицу больше значение num и неизвестно на сколько больше sum. Все потому что bla становится равным EOF только после неудачной попытки чтения.
Предлагается на выбор два правильных варианта.
Первый более лаконичный


sum=0;
num=0;
while ( fscanf(f, "%c", &bla) != 0 ) {
sum += bla;
num++;
}


Второй мне больше нравится - дело вкуса


sum=0;
num=0;
while (1) {
fscanf(f, "%c", &bla);
if( feof( f ) ) break;
sum += bla;
num++;
}

Оставить комментарий
Имя или ник:
Комментарий: