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); } } }
问题分析
原代码存在以下问题导致无法正确输出:
- 重复输出前缀:每次找到偶数时都打印一次
Even nums are:,导致结果中多次出现前缀 - 格式混乱:通过
sprintf生成带空格的字符串再打印,不仅冗余,还会导致元素分散且带有多余空格 - 数组索引使用低效:直接用循环变量
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
相关产品推荐
相关产品推荐

