首页 新闻 会员 周边

C语言的一个小问题

0
[已解决问题] 解决于 2018-03-09 11:11
统计输入中各个数字出现的次数的
int c;

 while((c=getchar())!=EOF)
 {
  if(c>='0'&&c<='9')
      ++ndigit[c-'0'];                            //++ndigit[c]为什么不行?
  
 }

svcsd的主页 svcsd | 菜鸟二级 | 园豆:204
提问于:2018-03-08 12:41
< >
分享
最佳答案
-1

getchar()输入的是一个字符。不是int类型的数字。所以ndigit[c]是c的Ascii码值,所以要减去'0'的ascii码值才能得到正确的数字。

比如输入的是9 

9的ascii值是57 那么ndigit[c]就是ndigit[57]。而ndigit[c-'0']就是ndigit[57-48]=ndigit[9]

奖励园豆:5
Shendu.CC | 老鸟四级 |园豆:2138 | 2018-03-08 12:59

谢啦谢啦,看懂了

svcsd | 园豆:204 (菜鸟二级) | 2018-03-09 11:10
其他回答(2)
-2

更详细的描述问题好一些,我也很久没弄c语言了,不过好像getchar是能获取回车的,如果是无法运行成功可能是EOF问题。还有可能是数组初始化问题,好像初始值是一个负值?

随风行云 | 园豆:936 (小虾三级) | 2018-03-08 14:30

getchar 是读入单个字符串,用户输入回车表示输入结束,所以回车是getchar输入结束的标志,不会把回车读进去处理。EOF表示输入文件结束,加入EOF之后用户输入完数据按Ctrl +Z 表示输入结束。EOF不会有问题的。楼主的问题在于int c 变量,getchar返回的是输入字符的ascii码值。

支持(0) 反对(0) Shendu.CC | 园豆:2138 (老鸟四级) | 2018-03-08 14:50

@Shendu.cc: 噢,我有点迷糊,我没认真看他那个注释,我以为是他那个代码报错,原来是问注释那个为什么不行。不过我说的是Ctrl +Z 是EOF的结束标志,有些人不会这个。getchar那个确实是我记错了,所以我打了好像。

支持(0) 反对(0) 随风行云 | 园豆:936 (小虾三级) | 2018-03-08 15:07

@生活还得继续: 楼主跑了,又不结贴。

支持(0) 反对(0) Shendu.CC | 园豆:2138 (老鸟四级) | 2018-03-08 15:22

@Shendu.cc: 基本不是经常看博客园的,我答的一些基本都要第二天才回来结贴。

支持(0) 反对(0) 随风行云 | 园豆:936 (小虾三级) | 2018-03-08 15:34

@Shendu.cc: 再说也没有园豆

支持(0) 反对(0) 随风行云 | 园豆:936 (小虾三级) | 2018-03-08 15:34

@生活还得继续: 园豆这个东西一定要好好攒着,据说博客园升级之后,园豆会是个非常牛逼的货币。我现在到处骗豆子,就等着博客园升级了。

支持(0) 反对(0) Shendu.CC | 园豆:2138 (老鸟四级) | 2018-03-08 15:42
0

getchar()获取的是字符

Arthurian | 园豆:1123 (小虾三级) | 2018-03-08 18:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册