C语言实现先批量输入数字至0,再统一输出对应次数多行内容问题
问题:先收集所有输入数字,再统一输出对应重复次数的结果
需求说明
程序需实现以下逻辑:
- 接收用户逐行输入的数字,直到输入
0时停止输入 - 完成全部输入后,将每个输入的非0数字
y,逐行打印y次(例如输入3则打印3次3)
现有代码问题
当前代码会在输入一个数字后立即输出对应内容,不符合「先收集全部输入再统一输出」的预期。即使在scanf的%d后添加\n也无法解决该问题。
现有代码
#include <stdio.h> int main() { int y = 1; while (y != 0) { scanf("%d", &y); if (y == (0)) { break; } for (int i = 1; i <= y; i++) { printf("%d\n", y); } } }
当前输入输出表现
输入:
1
2
3
4
0
当前输出:
1
1
2
2
2
3
3
3
3
4
4
4
4
4
0
期望输出
1
2
2
3
3
3
4
4
4
4
修正方案
核心问题是现有代码没有存储输入的数字,而是边输入边输出。我们需要先把所有非0输入存储到数组中,等输入结束后再统一处理输出。
修正后的代码
#include <stdio.h> #define MAX_INPUTS 100 // 可根据需求调整最大输入数量 int main() { int inputs[MAX_INPUTS]; int count = 0; int y; // 收集所有输入,直到输入0 while (scanf("%d", &y) == 1 && y != 0) { if (count < MAX_INPUTS) { // 防止数组越界 inputs[count++] = y; } } // 统一输出每个数字对应次数 for (int i = 0; i < count; i++) { int num = inputs[i]; for (int j = 0; j < num; j++) { printf("%d\n", num); } } return 0; }
代码说明
- 定义数组
inputs存储所有非0输入,count记录有效输入的数量 - 第一个循环负责收集输入:每次读取数字,若不为0且数组未存满,则存入数组
- 输入0后退出收集循环,进入输出阶段:遍历数组中的每个数字,循环打印对应次数
- 增加了数组越界判断,避免因输入过多导致程序异常
内容的提问来源于stack exchange,提问作者user20532632
相关产品推荐
相关产品推荐

