Я думаю, что pmg ударил по актуальной проблеме; Вы открыли файл в режиме добавления, и, согласно моей копии H & S, чтение из потока добавления не разрешено. Вы должны открыть его «+» (добавить / обновить), чтобы прочитать и записать поток.
Вы должны всегда проверять результат вызова *scanf()
(fscanf()
, sscanf()
, scanf()
и т. Д.) На успех до проверки feof()
или ferror()
, и Вы никогда не должны ставить feof()
условие проверки цикла (поскольку оно не вернет true до тех пор, пока после вы не попытаетесь прочитать после конца файла, ваш цикл всегда будет выполняться слишком много раз) ,
Я бы изменил ваш цикл на что-то вроде этого:
for(;;)
{
if (fscanf(cfile, "%s", mystring) != 1)
{
if (feof(cfile))
{
fprintf(stderr, "Reached end of file!\n");
break; // exit loop
}
if (ferror(cfile))
{
fprintf(stderr, "Error while reading from file!\n");
break;
}
}
/**
* continue as before
*/
}