C语言如何将数字字符存入int数组并得到正确的数字值
问题原因
你得到的50、51、52是数字字符对应的ASCII编码值:C语言中char类型本质是存储字符ASCII码的整数,数字字符'0'到'9'的ASCII码是连续的,其中'0'对应48,'1'对应49,以此类推。你原代码直接把字符的ASCII码存入了int数组,打印数组时输出的就是ASCII值,而非字符对应的数字本身。
修复方案
赋值时将读取到的字符减去'0'的ASCII值,就能得到对应的数字整数值,修改后的代码如下:
while((c = getchar()) != EOF) { if((c >= '0') && (c <= '9')) { ndigits[length] = c - '0'; length = length + 1; } }
这种写法兼容性更强:不用硬编码固定数值48,即便运行环境的字符集不是ASCII,只要数字字符是连续编码的(符合C语言标准要求),逻辑就能正常生效,同时可读性也更高。
内容的提问来源于stack exchange,提问作者Cristhofer Lugo
相关产品推荐
相关产品推荐

