我正在练习从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
和换行符之间有什么区别。
还有其他方法来修复此程序吗?
答案 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”时,程序需要行结束。当你完成第一行时,程序将获得第一行的结束并运行。这就是为什么代码按预期工作的原因,但只显示长一行的字符。