最近在看这本书,第一章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码,可以实现把字符转换成对应的数字的目的。
总之,整个这篇代码,非常糟糕,故弄玄虚。可悲的是,你还在照着学。