Использование fscanf и fprintf вместе в C
#include <stdio.h>
#include <stdlib.h>
#define FILE_NAME "ff.txt"
int main() {
char x[10],y[10];
FILE *fp;
fp = fopen(FILE_NAME, "r+");
if (fp == NULL) {
printf("couldn't find %sn ",FILE_NAME);
exit(EXIT_FAILURE);
}
fprintf(fp,"Hello2 Worldn");
fflush(fp);
fscanf(fp,"%s %s",x,y);
printf("%s %s",x,y);
fclose(fp);
return 0;
}
вот сводная версия того, что я пытаюсь сделать. Этот код ничего не печатает в консоли. Если я удалю fprintf
звонок, он печатает первые 2 строки в файле, для меня его Hello2 World
. Почему это происходит? Даже после того,как я ... --3--> на fp
?
1 ответов
после fprintf()
, указатель файла указывает на конец файла. Вы можете использовать fseek()
чтобы установить filepointer в начале файла:
fprintf(fp,"Hello2 World\n");
fflush(fp);
fseek(fp, 0, SEEK_SET);
fscanf(fp,"%s %s",x,y);
или даже лучше, как предложил @Peter, используйте rewind()
:
rewind(fp);
rewind
:внутренние индикаторы конца файла и ошибки, связанные с потоком удаляются после успешного вызова этой функции, и все эффекты из предыдущих вызовов ungetc в этом потоке удаляются.
в потоках, открытых для обновления (чтение+запись), вызов перемотки позволяет переключайтесь между чтением и письмом.
всегда лучше проверить код возврата fscanf()
тоже.
чтобы избежать переполнения буфера, вы можете использовать:
fscanf(fp,"%9s %9s",x,y);