C语言统计数字代码中++ndigit[c-'0']数组下标表达式疑问
++ndigit[c - '0'] 运行原理解析 - C语言中字符类型本质存储的是对应的ASCII编码值,标准ASCII表中数字字符
'0'到'9'是连续排列的,'0'的编码值为十进制48,'1'为49,依次递增到'9'的编码值57。 - 进入这个运算前,
if (c >= '0' && c <= '9')的判断已经保证当前读取到的变量c一定是数字字符,所以c - '0'的运算结果一定是0到9之间的整数:比如c为'5'时,'5' - '0'等价于53-48=5,正好得到数字本身的数值。 - 数组
ndigit[10]的10个元素分别对应数字0~9的出现次数,初始化时所有元素都被赋值为0。我们用c-'0'得到的结果作为数组下标,正好可以定位到当前数字对应的计数单元。 - 最后的前置自增
++会把对应下标的计数单元值加1,完成当前数字的次数统计。
补充:你贴的代码里有几处笔误,直接运行会报错,可以修改后再测试:
- while条件里的
I= EOF应为!= EOF- if判断里的大写
C要改成小写变量名c- else if的条件判断里的分号要改成逻辑或运算符
||,即else if (c ==' ' || c == '\n' || c =='\t')
内容的提问来源于stack exchange,提问作者Nil
相关产品推荐
相关产品推荐

