在C中一起使用fscanf和fprintf

时间:2016-01-14 13:07:48

标签: c fopen file-handling

#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 %s\n ",FILE_NAME);
        exit(EXIT_FAILURE);         

    }
    fprintf(fp,"Hello2 World\n");
    fflush(fp);   
    fscanf(fp,"%s %s",x,y);
    printf("%s %s",x,y);
    fclose(fp);
    return 0;
}

这是我想要做的简化版本。此代码不会在控制台中打印任何内容。如果我删除fprintf调用,它会打印文件中的前2个字符串,对我来说是Hello2 World。为什么会这样?即使在我fflush之后fp

1 个答案:

答案 0 :(得分:7)

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);
相关问题