【发布时间】:2009-08-17 22:40:04
【问题描述】:
问题说明了一切:
...
int ndigit[10];
...//fill in the array with 0s
while((c = getchar()) != EOF)
if(c >= '0' && c <= '9')
++ndigit[c - '0']; //<== unable to understand this part
据说,该数组存储来自输入流的传入数字字符...
【问题讨论】:
-
就像所有提到 ASCII 的回复的旁注一样。 ISO C 不保证字符集是 ASCII;但是,据我记得,它确实保证,无论数字字符 '0' ... '9' 有什么整数值,它们都是连续的 - 所以如果
c是一个char这是一个数字,(c - '0')是一种可移植的方式来检索该数字的值。 -
即使 EBCDIC 的字母被分成三个跨度,也将数字保持在连续的代码点。 CDC 显示代码和 DEC Rad-50 也是如此。显然,Baudot 几乎没有留下任何东西,如果纸带向后安装,他更喜欢有某种意义的编码。由于 Unicode 采用 ASCII 作为前 128 个码位,因此它也保持数字连续。