getchar()输入的是一个字符。不是int类型的数字。所以ndigit[c]是c的Ascii码值,所以要减去'0'的ascii码值才能得到正确的数字。
比如输入的是9
9的ascii值是57 那么ndigit[c]就是ndigit[57]。而ndigit[c-'0']就是ndigit[57-48]=ndigit[9]
谢啦谢啦,看懂了
更详细的描述问题好一些,我也很久没弄c语言了,不过好像getchar是能获取回车的,如果是无法运行成功可能是EOF问题。还有可能是数组初始化问题,好像初始值是一个负值?
getchar 是读入单个字符串,用户输入回车表示输入结束,所以回车是getchar输入结束的标志,不会把回车读进去处理。EOF表示输入文件结束,加入EOF之后用户输入完数据按Ctrl +Z 表示输入结束。EOF不会有问题的。楼主的问题在于int c 变量,getchar返回的是输入字符的ascii码值。
@Shendu.cc: 噢,我有点迷糊,我没认真看他那个注释,我以为是他那个代码报错,原来是问注释那个为什么不行。不过我说的是Ctrl +Z 是EOF的结束标志,有些人不会这个。getchar那个确实是我记错了,所以我打了好像。
@生活还得继续: 楼主跑了,又不结贴。
@Shendu.cc: 基本不是经常看博客园的,我答的一些基本都要第二天才回来结贴。
@Shendu.cc: 再说也没有园豆
@生活还得继续: 园豆这个东西一定要好好攒着,据说博客园升级之后,园豆会是个非常牛逼的货币。我现在到处骗豆子,就等着博客园升级了。
getchar()获取的是字符