C语言接收数字为字符串计算奇偶位和程序运行出错求助
问题排查与修复方案
现有代码错误列表
- 变量名非法:
odd _sum中间存在空格,C语言变量名不允许包含空格,需修改为odd_sum scanf参数错误:数组名num1本身已经是数组首地址,不需要加取地址符&,正确写法为scanf("%s", num1)printf格式符误用:printf("%s", num1[0])中%s要求传入字符串首地址,num1[0]是单个字符类型,需改用%c格式符,否则会触发非法内存访问- 循环边界错误:字符串有效下标范围为
0 ~ length-1,i<=length会访问到字符串结束符\0,无计算意义,需修改为i < length atoi函数误用:atoi入参要求是带\0结束符的字符串(char*类型),num1[i]是单个char类型,类型不匹配。单数字字符转整型的正确实现是num1[i] - '0',利用ASCII码连续特性直接计算得到对应数值。
核心逻辑说明
输入数字以字符串形式存储时,每个元素是对应数字的ASCII字符,例如字符'3'的ASCII码为51,字符'0'的ASCII码为48,两者做差即可得到整型数值3,是单字符转数字的最高效实现。
下标从0开始计数时,i%2==0对应偶数下标位,i%2!=0对应奇数下标位,完全匹配需求的计算规则。
修正后完整代码
#include<stdio.h> #include<string.h> int main() { int length, i, odd_sum = 0, even_sum = 0; char num1[100]; printf("Enter the number : "); scanf("%s", num1); // 首字符打印测试 printf("输入数字的首字符为:%c\n", num1[0]); length = strlen(num1); for(i = 0; i < length; i++) { int current_digit = num1[i] - '0'; if(i % 2 == 0) { odd_sum += current_digit; } else { even_sum += current_digit; } } printf("\n奇数下标位数字和 : %d \n", odd_sum); printf("偶数下标位数字和 : %d ", even_sum); return 0; }
内容的提问来源于stack exchange,提问作者manoj madhavan
相关产品推荐
相关产品推荐

