从键盘输入到c ??中的文本文件代码编译,但* EOF *不起作用?

时间:2014-11-04 19:54:14

标签: c fopen

#include <stdio.h>
int main ()
{
  FILE * pFile;
  char ch;
  pFile = fopen ("G:\\ IJLAL.txt","w+");
  while((ch = getchar())!=EOF)
    putc(ch,pFile);
  fclose(pFile);
  return 0;
}
你可以指定问题??? 我对 fopen 功能完全不熟悉。 请帮我解决这个问题

3 个答案:

答案 0 :(得分:2)

getchar()函数返回int值,而不是char。通过将其强制转换为char变量,您无法检测到EOF。

只需将char ch更改为int ch即可。*


  • 实际上,您可能仍会遇到文件名问题。你确定它应该包含空格吗?您是否知道\\被编码为单个反斜杠字符?

答案 1 :(得分:1)

根据C99标准(7.19.1.3):

  

EOF,扩展为整数常量表达式,类型为int和   一个负值,由几个函数返回以指示   文件结束,即不再有来自流的输入;

关键是EOF超出unsigned char的范围。我确信这是故意这样做的,所以仍然可以返回所有256个基本和扩展的ASCII字符,并且不同于EOF

答案 2 :(得分:0)

你可以试试这个。

1 - 检查fopen()返回值 - &gt; print errno value(perror)

#include <stdio.h>
#include <stdbool.h>

int main(void)
{
    int     c;
    bool    run;
    FILE    *fd;

    run = true;
    fd = fopen("/tmp/file.txt", "w+");
    if (fd == NULL)
    {
        perror("fopen");
        return (1);
    }
    while (run == true)
    {
        c = getchar(); // Press ctrl + D for exit
        run = (!feof(stdin) && !ferror(stdin));
        if (run == true)
            putc(c, fd);
    }
    fclose(fd);
}

如果您愿意,可以看到link