【问题标题】:What is wrong with this code of file handling in c?这个c文件处理代码有什么问题?
【发布时间】:2018-02-28 01:06:40
【问题描述】:

我正在尝试从终端将内容写入文件。正在创建文件,但内容未写入文件。

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    int main(int argc, char *argv[])
    {
        FILE *fp;
        fp=fopen(argv[1],"w");
        char ch;
        while((ch=getchar())!=EOF)
        {
           putc(ch,fp);
        }
        fclose(fp);
        return 0;
    }

【问题讨论】:

  • 旁注:始终检查 I/O 函数的返回值,包括 fopen 和 putc。
  • 你如何发出 EOF 信号?
  • 如果在调用putc()之前显示正在读取的字符会发生什么?
  • 问题无法重现。这段代码对我来说按预期工作。
  • getchar() 返回int,而不是char,所以char ch; -> int ch;。

标签: c file-handling getchar putchar getc


【解决方案1】:

如果您不发出 EOF 信号(在 Windows 中为 Ctrl+Z,在 Linux 中为 Ctrl+D),则循环将继续执行,直到收到该信号.

如果您在程序仍在执行时尝试亲眼读取文件,则文件流不会关闭(fclose(fp); 不会执行),因此文件在您看来是空的,甚至虽然内容会在文件流关闭时显示给您。

【讨论】:

    【解决方案2】:

    以下工作正常:

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    int main(int argc, char *argv[])
    {
        FILE *fp;
        fp=fopen(argv[1],"w");
        char ch;
        while(1)
        {
            ch = (char)getchar();
            putc(ch,fp);
            if(ch == '.') break;
        }
        fclose(fp);
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 2015-02-23
      • 1970-01-01
      相关资源
      最近更新 更多