C语言 getchar() function and EOF



我正在练习从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("%ldn",nc);
   return 0;
}

但当我将EOF更改为换行符n时,代码按我预期的方式工作,但仅只显示一行字符的长度。之后代码终止。

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

有其他方法可以修复这个程序吗?

getchar()在到达文件末尾时返回EOF。当您到达行的末尾时,它会返回n。这就是为什么如果用n替换EOF,当循环到达行的末尾时,它就结束了。

EOF的意思是End of File,当您使用getchar()到达文件末尾时,就会得到它。当你到达一行的末尾时,你会得到n

当你现在想要它,以便它再次打印文本使用这个:

#include <stdio.h>
int main(void) {
    int c, nc = 0;
    while ((c = getchar()) != 'n') {
        nc++;
        putchar(c);
    }
    printf("%dn",nc);
    return 0;
}

EOF是文件的末尾。这并不意味着你"长期性格"的终结。如果您只是在命令行屏幕上键入占据几行的多个字符,程序仍然不会得到EOF,除非您键入Ctrl+D模拟文件结尾。当您将EOF更改为"\n"时,程序需要行尾。当你完成第一行时,程序会得到第一行的末尾并运行。这就是为什么代码可以像您预期的那样工作,但只显示一行字符的长度。

最新更新