为什么 rewind() 在这个简单的程序中没有按预期工作?

Why is rewind() not working as expected in this simple program?

为什么下面的程序没有按预期打印新创建的文本文件 ("E") 的第一个字符?这是一个简单的程序,我试图从各个方面来看问题,但找不到原因。正在我的 D 盘上创建内容为“EFGHI”的文本文件,但由于某些原因 "E" 未被读取即使我使用 getc() 倒带阅读并且输出是 -1.

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int x;
    FILE *fp;
    fp=fopen("F:\demo.txt","w");
    if(fp==NULL)
        puts("Write error");
    fputs("EFGHI",fp);
    rewind(fp);

    x=getc(fp);
    printf("%d",x);
    fclose(fp);
}

更新:

    #include<stdio.h>
    #include<stdlib.h>

    int main()
    {
        int x;
        FILE *fp;
        fp=fopen("F:\demo.txt","w+");
        if(fp==NULL)
        {
            puts("Write error");
            exit(EXIT_SUCCESS);
        }
        fputs("EFGHI",fp);
        rewind(fp);

        while(!feof(fp))
        {
            x=getc(fp);
            printf("%d\n",x);
        }
        fclose(fp);
     }

文件模式"w"打开文件只用于写入

使用"w+"打开文件进行写入读取。

(更多文件模式请参见man fopen。)


关于 getc() 返回 -1,来自 man getc 的逐字记录:

[...] getc() [...] return[s] the character read as an unsigned char cast to an int or EOF on end of file or error.

EOF 通常等于 -1。要对此进行测试,请执行 printf("EOF=%d\n", EOF);

fp=fopen("F:\demo.txt","w");

打开文件进行写入,然后您尝试从中读取。那是行不通的。

我还会注意到您的程序一直在尝试使用 fp,即使它创建失败也是如此,因为您的 if 检查 fp 只打印错误,它不会'不要停止程序。