我正在练习从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"时,程序需要行尾。当你完成第一行时,程序会得到第一行的末尾并运行。这就是为什么代码可以像您预期的那样工作,但只显示一行字符的长度。