[英]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("%ld\n",nc);
return 0;
}
但是,当我将EOF
更改为换行符\\n
,代码按我的预期工作,但只显示一行的长字符。 之后,代码终止。
我的问题是EOF
到底是什么, EOF
和换行符之间有什么区别。
还有其他解决方案吗?
到达文件末尾时, getchar()
返回EOF
。 当您到达行尾时,它返回\\n
。 这就是为什么如果将EOF
替换为\\n
,则循环到达行尾时会结束的原因。
EOF
表示End of File
,当您使用getchar()
到达End of File
,您会得到提示。 您到达行尾时会得到\\n
。
现在,当您需要它以便再次打印文本时,请使用以下命令:
#include <stdio.h>
int main(void) {
int c, nc = 0;
while ((c = getchar()) != '\n') {
nc++;
putchar(c);
}
printf("%d\n",nc);
return 0;
}
EOF是文件的末尾。 这并不意味着您“长相符”的结尾。 如果仅在命令行屏幕上键入占用多行的许多字符,则除非您键入Ctrl + D模拟文件结尾,否则程序仍不会获得EOF。 当您将EOF更改为“ \\ n”时,该程序需要换行。 当您完成第一行时,程序将到达第一行的末尾并运行。 这就是为什么代码可以按您预期的那样工作,但只在一行中显示长字符的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.