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

C语言如何先读取全部输入字符串再统一打印输出

fgets读取多组字符串并打印的实现修复

问题根因

  • scanf("%d", &n)执行后,输入缓冲区会残留输入n时按下的换行符,首次调用fgets会直接读取到空换行,无法获取第一个有效输入内容
  • 仅使用一维字符数组存储输入,每次fgets调用会覆盖上一次的读取结果,循环结束后仅能保留最后一次输入,无法输出所有内容

修正后代码

#include <stdio.h>
#include <string.h>
// 可根据实际需求调整两个宏的取值
#define size_limit 128 // 单条字符串最大长度
#define max_input_cnt 10 // 最大输入条数

int main() {
    int n, i;
    // 用二维数组存储多条输入字符串
    char str[max_input_cnt][size_limit];
    scanf("%d", &n);
    // 吃掉scanf残留的换行符
    getchar();
    for(i = 0; i < n; i++){
        fgets(str[i], size_limit, stdin);
        // 可选:去掉fgets读取到的末尾换行符
        str[i][strcspn(str[i], "\n")] = '\0';
    }
    // 循环依次打印所有输入内容
    for(i = 0; i < n; i++){
        printf("%s\n", str[i]);
    }
    return 0;
}

改动说明

  • 将一维字符数组改为二维数组,每个下标对应存储一条输入字符串,避免内容被覆盖
  • 新增getchar()清理scanf残留的换行符,保证fgets可以正常读取后续有效输入
  • 输出阶段新增循环,依次打印所有存储的输入内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:54:03