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

如何在C语言中对给定字符串的数字求和?我的代码为何输出异常?

你的代码存在三个核心错误,导致输出不符合预期

错误1:字符数字未转换为数值

字符串中的'2'是ASCII字符,对应的十进制值是50,你直接将z[i]加到结果里,实际计算的是50+50+50+50=200,而非预期的2+2+2+2=10。要把字符转成对应数值,需用z[i] - '0'——因为数字字符的ASCII码是连续的,'0'对应48,'2'-'0'刚好等于数值2。

错误2:结果变量类型错误

你用char result = 0;存储求和结果,char类型通常是8位有符号整数,范围为-128到127。200已经超出这个范围,会触发整数溢出,导致结果变成无效的负数(200的8位二进制补码对应-56),这是输出乱码的关键原因之一。应改用int result = 0;存储结果,避免溢出问题。

错误3:输出格式符错误

printf("%c", result);是把结果当作ASCII字符输出,而你需要输出的是数值10,应该用%d格式符来输出整数。


修正后的代码

#include <stdio.h>
#include <string.h>

void add_numbers(char* z)
{
    int result = 0;
    int len = strlen(z); // 提前计算长度,避免循环中重复调用strlen
    for (int i = 0; i < len; i++)
    {
        result += (z[i] - '0');
    }
    printf("%d", result);
}

int main(void)
{
    char* z = "2222";
    add_numbers(z);
    return 0;
}

内容的提问来源于stack exchange,提问作者Champs Legion

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:54:17