getchar()函数和EOF

时间:2014-10-25 12:42:24

标签: c eof getchar

我正在练习从The C ANSI Programming Language Second Edition读取的C程序 我学习了getchar()函数。然后书中说getchar()从stdin读取字符直到换行符或EOF已经到达。在书中我尝试重写程序来计算使用getchar()函数的字符。编译时代码很好。问题是代码无法显示长字符。

以下是代码:

#include <stdio.h>

int main (void){
   long nc;

   nc=0;
   while(getchar()!=EOF)
      nc++;
   printf("%ld\n",nc);

   return 0;
}

但是,当我将EOF更改为换行符\n时,代码按照我的预期运行,但仅限 显示长字符只有一行。之后代码终止。

我的问题是EOF究竟是什么,EOF和换行符之间有什么区别。

还有其他方法来修复此程序吗?

3 个答案:

答案 0 :(得分:3)

当你到达文件末尾时,

getchar()会返回EOF。当你到达行尾时它返回\n。这就是为什么如果将EOF替换为\n,当你的循环到达行尾时就会完成。

答案 1 :(得分:1)

EOF表示End of File,当您使用getchar()到达文件末尾时,就会得到\n。当你到达一行的末尾时,你会得到#include <stdio.h> int main(void) { int c, nc = 0; while ((c = getchar()) != '\n') { nc++; putchar(c); } printf("%d\n",nc); return 0; }

当你现在需要它时,再打印文本再使用:

{{1}}

答案 2 :(得分:1)

EOF是文件的结尾。这并不意味着你的“长篇大论”的终结。如果您只是在命令行界面上键入多行占用多行,则程序仍然无法获得EOF,除非您键入Ctrl + D模拟文件末尾。当您将EOF更改为“\ n”时,程序需要行结束。当你完成第一行时,程序将获得第一行的结束并运行。这就是为什么代码按预期工作的原因,但只显示长一行的字符。