如何在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
相关产品推荐
相关产品推荐

