@gnometorule был верным. Вы читаете еще раз, чем вам нужно. Если вы проверили свое возвращаемое значение, вы найдете fscanf
, вероятно, вернувшийся EOF
. То, что вы хотите сделать, это прочитать файл, пока fscanf
возвращает ожидаемое значение. Так как вы читаете 1 пункт, он должен вернуться 1. Если это не так, есть проблема. Более того, feof
будет прав, только если конец файла был достигнут. Что делать, если была ошибка чтения? Возможно, вы пытаетесь прочитать из файла с установленным индикатором ошибки, а feof
не обнаружит этого.
Просмотрите следующий код. Это должно дать вам представление о том, как обращаться с файлами.
/* This is used to determine whether an end-of-file error message should be printed or the word was found. */
int cmp_result;
/* Stop reading when the file can't be read or the words are equal. */
do
cmp_result = strcmp(word, wd);
while (fscanf(f, "%s", wd) == 1 && cmp_result != 0);
/* Check for a file read error. */
if (ferror(f))
printf("Error reading file\n");
/* End of file reached before words are equal; feof(f) may be true when cmp_result==0 or not, so checking cmp_result is more reliable in this case. */
else if (cmp_result != 0)
printf("Word '%s' not found\n", word);
/* Words are equal. */
else
printf("Yes\n");
Логика в том, что если цикл был завершен, произошла ошибка чтения или слово было найдено. Положения ветвления после цикла проверяют это.
Сначала проверяется индикатор ошибки файла. Если он не установлен, достигнут конец файла или слово найдено.
Если слово было найдено, может быть установлен индикатор конца файла или нет. Но если слово не было найдено, должен быть установлен индикатор конца файла, иначе цикл не должен был выйти, поскольку мы уже исключили индикатор ошибки в первом случае if. Вот почему мы проверяем результат сравнения вместо использования feof(f)
.
Если эти случаи терпят неудачу, у нас остается одна возможность: слово найдено.
Надеюсь, это поможет!
Что такое 'string' и что' GetString' делает? – P0W
Нет типа 'string' в C. – haccks
http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong – Mat