4

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

更新:

    #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);
     }
4

2 回答 2

7

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

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

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


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

[...] getc() [...] 将读取的字符返回 [s]转换为文件末尾的unsigned char一个intEOF或错误。

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

于 2015-10-28T14:43:06.710 回答
4

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

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

我还要注意,fp即使创建失败,您的程序也会继续尝试使用,因为您的if检查fp只会打印错误,它不会停止程序。

于 2015-10-28T14:43:07.467 回答