C语言代码打印int数组为何输出ASCII码而非实际数值?
问题根因
- C语言里数字字符
'0'到'9'的底层存储是连续的ASCII码,对应十进制值为48~57。你的代码在判断str[i]是数字字符后,直接把字符本身赋值给了int类型的digitsInInputString数组,数组里实际存储的是字符的ASCII值,不是数字的字面数值。 - 后续打印时你用
%d格式符输出int数组元素,自然就输出了49、56这类ASCII码值,和预期的1、8等字面数字不符。
修复方法
修改extractDigits函数中的赋值逻辑,将数字字符减去'0'的ASCII值,就能转换为对应的字面数值。同时原代码循环条件多减了1,会漏掉字符串最后一个字符的判断,建议同步修正:
int extractDigits (char str[MAX], int digitsInInputString[MAX]) { //返回字符串中的数字总数,同时将提取到的数字存入digitsInInput数组 int i; int totalDigits = 0; for (i=0; i < strlen(str); i++) { // 删掉原条件的-1,避免漏掉最后一个字符 if (isdigit(str[i])) { digitsInInputString[totalDigits] = str[i] - '0'; // 核心修改:减去字符'0'的ASCII值完成转换 totalDigits++; } } return totalDigits; }
修改后运行即可得到预期的输出结果。
内容的提问来源于stack exchange,提问作者Nixx
相关产品推荐
相关产品推荐

