我从一本关于C编程的电子书中扯下了这个。
我理解字符'0'和'9'的ASCII表示是整数,所以我理解与整数数组的兼容性。我只是不确定如何计算显示的输出?输入就是代码本身。
这句话是什么意思?
++ndigit[c-'0'];
那么,程序本质上是否检查输入是否是ASCII代码表的前10个部分之一? ASCII CODE
答案 0 :(得分:3)
不,它没有。
c - '0'
从0
的字符中减去字符c
的(不一定是ASCII)字符代码。如果c
是一个数字,这将产生0到9之间的数字。然后,结果整数用于使用ndigit
运算符索引零初始化[]
数组,然后使用前缀增量运算符(++
)来递增该元素。索引。
顺便说一下,代码在多个地方都是错误的。我建议你换成另一本书,因为这本书似乎已经过时和/或鼓励使用几种不良编程习惯。
首先,main()
没有返回类型,这是一个错误。它需要声明为int main()
或int main(void)
或int main(int, char **)
。如果省略了,那么较旧的编译器有假设隐式int
返回类型的坏习惯,但现在不推荐使用此行为。
其次,最好初始化ndigit
数组,如下所示:
int ndigit[10] = { 0 };
for循环是多余的,因为我们可以进行初始化;它也比初始化语法的可读性差,并且它也很危险:作者不使用sizeof(ndigits) / sizeof(ndigits[0])
计算数组的计数,但是他对其长度进行了硬编码,这可能会导致数组长度时缓冲区溢出更改(减少)并忘记for循环中的硬编码长度值。
答案 1 :(得分:1)
程序计算引入0到9之间的数字作为输入的次数,输入中有多少个空格和多少个其他字符。
++ndigit[c-'0'];
'0' - 整数是0的ASCII码。
c - 是读取字符(其ASCII码)
c - '0'=由ASCII码c表示的实际数字(在0和9之间)。
例如'3'(ASCII)将是3(数字=整数)+'0'(ASCII)
这就是你如何在数组中获得数字的索引,并增加数字出现的次数。