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

数组首元素未正确转入新数组及数组遍历循环优化问题

数组拆分数字问题:首元素丢失与含0时循环失效

问题1:首元素2丢失的原因

你的for循环增量部分i++ && k++写法错误,导致第一次循环后k没有自增,第二次循环时覆盖了sumdig[0]的初始值:

  • 后自增运算符i++返回的是自增前的数值,第一次循环时i=0,i++返回0
  • 逻辑与&&的短路特性:当左侧为0(假)时,右侧的k++不会执行,所以第一次循环结束后k仍然是0
  • 第二次循环处理元素6时,sumdig[k] = sum[i]%10会把sumdig[0]的2覆盖成6,导致首元素丢失

问题2:含0时循环失效,正确的数组遍历方式

原循环用sum[i]>0作为终止条件,当数组中存在0元素,或者未初始化的数组元素(默认是0)时,循环会提前终止。要遍历数组所有有效元素,有两种可靠方式:

  • 直接指定数组的实际元素个数:比如你这里初始化了6个元素,循环条件写成i < 6
  • 使用宏定义或变量记录元素个数,方便后续修改:比如#define COUNT 6,然后循环i < COUNT

修正后的代码

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

#define ELEM_COUNT 6  // 记录数组实际元素个数

int main(void)
{
    int sum[50] = { 2, 6, 3, 10, 32, 64 };
    int i, l, k = 0, sumdig[10], dig = 0;

    // 遍历数组所有有效元素,分开处理i和k的自增,避免短路问题
    for (i = 0; i < ELEM_COUNT; i++)
    {
        int num = sum[i];  // 用临时变量保存原数值,避免修改原数组
        if (num == 0) {  // 单独处理0元素
            sumdig[k++] = 0;
            dig++;
            continue;
        }
        // 拆分数字的每一位,支持任意位数
        while (num > 0)
        {
            sumdig[k++] = num % 10;
            dig++;
            num /= 10;
        }
    }

    // 输出测试
    for (l = 0; l < dig; l++)
    {
        printf("%i\n", sumdig[l]);
    }
}

代码说明

  1. 用ELEM_COUNT记录数组实际元素数,彻底避免依赖数组元素值判断循环终止
  2. 使用临时变量num保存原数组元素,防止修改原数组影响后续逻辑
  3. 用while循环拆分数字,支持处理任意位数的数字(不止原代码的两位)
  4. 单独处理0元素,确保0能被正确存入新数组

修正后的输出

2
6
3
0
1
2
3
4
6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:01:02