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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 01:00:00