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

时间:2015-10-28 14:39:19

标签: c text-files filestream getc rewind

为什么下面的程序没有按预期打印新创建的文本文件的第一个字符(" 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);
     }

2 个答案:

答案 0 :(得分:7)

文件模式"w"打开文件,仅用于编写

使用"w+"打开文件以撰写阅读。

(有关更多文件模式,请参阅man fopen。)

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

  

[...] getc() [...]返回[s]将unsigned char广告素材视为int EOF 在文件末尾或错误。

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

答案 1 :(得分:4)

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

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

我还会注意到,您的程序一直在尝试使用fp,因为if检查fp仅显示错误,但它不会停止该计划。