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
相关产品推荐
相关产品推荐

