c语言成xu问题,执行不了了

最近在看这本书,第一章22页的例子是计算输入中有多少数字多少空格回车及其他。但这个例子按照书上完整入运行后,命令提示框中,对键入的字符回车后无效,这是怎么回事,程序如下图片说明,另外此程序中既然已经声明c为int,后边还用c-'0',确保其为int,有何意义,谢谢大神们

while后面是不是应该加上括号?

 不知道你看的是什么误人子弟的破书,但是你写的程序,连多一个字符都不愿意加上去。
首先,所有的循环、if语句,都应该加上{}
其次,你应该保证代码缩进正确,该有的空格都要有。
while (c = getchar() != EOF),为什么要在一行代码中做两件事情。
老老实实地写:
while (true)
{
    c = getchar();
        if (c == EOF) breakl
        ...
}
看得又清楚,又不容易出错。

同样的道理,++ndigit[c - '0'];,也应该写成
ndigit[c - '0'] = ndigit[c - '0'] + 1;
前者很容易感觉是ndigit在++

至于 c = '0',无非就是玩弄了一个小技巧,就是ascii码中'0' = 48 '1' = 49  '2' = 50,等等,因此用这个字符的ascii码减去'0'的ascii码,可以实现把字符转换成对应的数字的目的。

总之,整个这篇代码,非常糟糕,故弄玄虚。可悲的是,你还在照着学。