繁体   English   中英

getchar()函数和EOF

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM