如何用C语言实现新行计数器?代码运行异常求助
C语言换行计数器返回0的问题解决
你的代码逻辑本身是正确的,问题大概率出在输入操作细节或终端的EOF触发逻辑上,以下是具体排查点和解决办法:
常见原因与解决方式
- 输入文本未包含换行符:如果输入内容时全程没按回车键,或者最后一行输入完直接按Ctrl+D结束,程序自然统计不到换行。解决办法是每输入一行内容后按回车键(包括最后一行),再按Ctrl+D触发EOF。
- 终端Ctrl+D的触发逻辑:在多数类Unix终端中,第一次按Ctrl+D仅将当前输入缓冲区的内容发送给程序;若缓冲区非空(比如输入了一行内容但没回车),程序会读取内容但不会触发EOF,只有缓冲区为空时按Ctrl+D才会触发EOF。如果最后一行没回车,需要连续按两次Ctrl+D:第一次发送当前行内容,第二次触发EOF,但这种情况最后一行无换行,计数依然不会增加。
代码规范修正
另外,你的代码不符合C99及以后的标准,main()应显式声明为int main()并返回状态值,修正后的代码如下:
#include <stdio.h> int main() { int c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); return 0; }
内容的提问来源于stack exchange,提问作者William Gwinell
相关产品推荐
相关产品推荐

