关于字符计数代码问题

问题遇到的现象和发生背景

这个代码我是照着c程序设计语言一书中1.5.2章的代码敲的,目的是字符计数

问题相关代码,请勿粘贴截图

#include
main()
{
long nc;

nc = 0;
while (getchar() != EOF)
    ++nc;/*此处提行后没有自动空格,我自己用空格敲出来的,不空格这里也是一样的*/
printf("%ld\n",nc);

}

运行结果及报错内容

运行后输入字符或者数字回车后,没有计数,没有任何输出的结果

我的解答思路和尝试过的方法

用1.5.2章后边的for语句敲出来却可以运行

我想要达到的结果

求问是哪里出了问题,还是书上的也是错的,如何改动才能使程序完整运行

找到问题了,是我while语句后没打{} 我用的是devc++可能和各位大佬的不一样,但是还是谢谢大佬们的热心回复!

getchar() != EOF
改为
getchar() != '\n'
EOF是文件结束符,你键盘敲进去的内容里不可能有EOF的,只有从文件读取的时候才可能有EOF
这就好比'\0'是字符串结束符,但是你单拿出一个字符串来会发现里面哪个字符也不是'\0'

要输入EOF才能跳出你这个while循环,你可以输入组合键CTRL+Z,即可输入EOF结束循环了。
如果换行就想结束,那么应该将getchar()的结果与'\n'换行符进行比较

循环得有个结束条件啊,你这样只有出错才有可能终止循环啊。

img


#include<stdio.h>
main()
{
    long nc;

    nc = 0;
    int c;
    while ((c = getchar()) != EOF && c != '\n' )
        ++nc;
    printf("%ld\n", nc);
}