0

我正在尝试重新创建我在课堂上看到的程序。老师制作了一个10行的文件,他向我们展示了文件确实创建了,然后他显示了它的内容。我的代码由于某种原因不起作用,它只是打印看起来像“=”一百万次然后退出。

我的代码:

void main()
{
    FILE* f1;
    char c;
    int i;
    f1=fopen("Essay 4.txt","w");
    for(i=0;i<10;i++)
        fprintf(f1," This essay deserves a 100!\n");
    do
    {
        c=getc(f1);
        putchar(c);
    }while(c!=EOF);
}

问题是什么?据我所见,我所做的正是给出的示例中的内容。

4

1 回答 1

0

流程是这样的:

  • 您创建一个文件(如果存在,则将其重置为空文件)。这就是"w"模式的作用。
  • 然后你写东西。请注意,文件位置始终被认为是在最后,因为写入会移动文件位置。
  • 现在你试着从头开始阅读。您阅读的第一件事已经是 EOF。事实上,当我在我的 Mac 上尝试你的程序时,我只得到一个奇怪的字符,正如人们所期望的那样,你使用的是do { } while. 我建议您改为执行以下操作:for (c = getc(f1); c != EOF; c = getc(f1)) { putchar(c) }或类似的循环。
  • 而且,您的阅读无论如何都应该失败,因为文件模式是"w"(只写)而不是"w+".

所以你需要做两件事:

  • 使用文件模式"w+"
  • 写入文件后将文件位置重置为文件的开头:fseek(f1, 0, SEEK_SET);.
于 2013-05-13T18:07:51.817 回答