C编程 - 整数和字符

时间:2013-07-08 18:36:59

标签: c integer ascii

我从一本关于C编程的电子书中扯下了这个。

Source

我理解字符'0'和'9'的ASCII表示是整数,所以我理解与整数数组的兼容性。我只是不确定如何计算显示的输出?输入就是代码本身。

这句话是什么意思?

++ndigit[c-'0'];

那么,程序本质上是否检查输入是否是ASCII代码表的前10个部分之一? ASCII CODE

2 个答案:

答案 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)

这就是你如何在数组中获得数字的索引,并增加数字出现的次数。