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

C语言:如何通过循环填充数组并一次性输出所有元素?

问题:循环填充数组并一行输出偶数元素

需求:

  • 创建大小为30的空数组x,仅通过循环填充符合条件的元素(禁止使用scanf、getchar()等输入函数,也不手动赋值)
  • 将数组中的偶数元素在一行内输出,格式示例:偶数为:2,4,6,8,10,12,14,16,18,20

用户当前代码:

#include<stdio.h>

int main(){
        int i,j;
        int x[ 30 ];
        char b[ 30 ];

        for (i = 1; i<=20; i++){
                if(i%2 ==0){
                        x[i] = i;
                        sprintf(b, " %d ", x[i]);
                        printf("Even nums are: %s ", b);
                }
        }
}

问题分析

原代码存在以下问题导致无法正确输出:

  1. 重复输出前缀:每次找到偶数时都打印一次Even nums are: ,导致结果中多次出现前缀
  2. 格式混乱:通过sprintf生成带空格的字符串再打印,不仅冗余,还会导致元素分散且带有多余空格
  3. 数组索引使用低效:直接用循环变量i作为数组索引,导致数组前10个奇数位置存储的是未初始化的垃圾值,浪费空间

修正方案:先填充数组再统一输出

这种方式严格遵循"先填充数组,再输出"的逻辑,同时保证输出格式符合要求:

#include<stdio.h>

int main(){
    int x[30];
    int count = 0; // 记录数组中已存储的偶数数量
    int i;

    // 步骤1:循环填充数组,仅存储1~20之间的偶数
    for (i = 1; i <= 20; i++){
        if (i % 2 == 0){
            x[count++] = i; // 用count作为有效元素的索引,依次存储
        }
    }

    // 步骤2:一行输出所有偶数
    printf("偶数为:");
    for (i = 0; i < count; i++){
        // 除第一个元素外,前面添加逗号分隔
        if (i != 0){
            printf(",");
        }
        printf("%d", x[i]);
    }
    printf("\n"); // 最后添加换行,规范输出格式

    return 0;
}

关键优化点

  • 用count变量跟踪有效元素数量,既避免数组空间浪费,也方便后续遍历输出
  • 输出时仅打印一次前缀,通过判断元素位置添加逗号,确保格式紧凑无多余符号
  • 数组存储逻辑清晰,仅保留符合条件的偶数元素

可选方案:边填充边输出

如果不需要保留完整数组的后续使用,也可以在填充数组的同时完成输出,代码更简洁:

#include<stdio.h>

int main(){
    int x[30];
    int count = 0;
    int i;

    printf("偶数为:");
    for (i = 1; i <= 20; i++){
        if (i % 2 == 0){
            x[count++] = i; // 先存入数组
            // 非第一个元素前添加逗号
            if (count > 1){
                printf(",");
            }
            printf("%d", i); // 直接打印当前偶数
        }
    }
    printf("\n");

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:37:43