You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:54:01