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

Mea*_*ead 4 c filestream text-files getc rewind

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

#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);
}
Run Code Online (Sandbox Code Playgroud)

更新:

    #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);
     }
Run Code Online (Sandbox Code Playgroud)

alk*_*alk 7

文件模式"w"打开文件写.

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

(请参阅man fopen更多文件模式.)


关于getc()返回-1,逐字逐句man getc:

[...] getc() [...]返回[s]在文件结尾或错误时将字符作为unsigned char强制转换为intEOF.

EOF通常等于-1.要测试这个做一个printf("EOF=%d\n", EOF);