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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:15:32