C语言 数数字

来源:百度知道 编辑:UC知道 时间:2024/06/18 13:37:17
请看片断
int ndigit[10];
nwhite = nother = 0;
for ( i =0; i < 10; ++i )
ndigit[i] = 0;
while ( ( c = getchar() ) != EOF )
if ( c >= '0' && c <= '9' )
++ndigit[c-'0'];
为什么要用[c-'0'],不能直接用[0]
最后一行应为{为什么要用[c-'0'],不能直接用[c]}

我们getchar()函数从键盘输入每一个按键都是有一个ASCⅡ码值的!比如:
我们键盘输入一个字母‘0’,然后我们把他存到变量中,哪么这个变量的值是多少呢?答案是我们的这个变量的值其实是48

你看你的语句c = getchar()与++ndigit[c-'0']; 如果现在我们从键盘输入的就是‘0’这个按键!按照你的问题补充,哪么程序就执行的是++ndigit[48];数组是不是溢出了?

我初步看,如果是用[0]的话,那数出来的数字就会无序,而用原题,就可以把数字都安放到与数组下标一样的数字,ndigit[0]=0;ndigit[1]=1......由于不知你"数数字"的意思和全程序,所以我也只能分析到这里

修改后:
因为c是字符型的,如果你用[c]的话,最后可能会发生错误,就算不发生错误都好,由于它是字符,所以c会当成48~57之一,下标越界,但原程序就没有这样的问题了