C语言实现逐行字符输入输出时无法正确打印结果的问题求助
代码问题定位与修复
核心问题点
- 需求要求处理2行输入,代码硬编码了3行的输入输出逻辑,数组也冗余开辟了3行空间
- 输出阶段未按每行实际有效字符长度打印,强制遍历全部
SIZE(10)个位置,会把初始化为0的空字符全部输出,导致多出大量无意义内容 - 代码中
printf("Enter three lines of text:\n")为多余提示输出,会直接干扰输出判定结果 - 输入循环未处理
getchar返回EOF的场景,异常输入下可能出现死循环
修复后代码
#include <stdio.h> #define SIZE 10 #define LINE_NUM 2 // 对应需求的2行输入要求 int main(void) { char string[LINE_NUM][SIZE]; int valid_len[LINE_NUM] = {0}; // 存储每行实际输入的有效字符长度 int i, j; int c; // 初始化字符数组 for(i = 0; i < LINE_NUM; i++) { for(j = 0; j < SIZE; j++) { string[i][j] = 0; } } // 读取输入 for (i = 0; i < LINE_NUM; i++) { j = 0; while (j < SIZE && (c = getchar()) != EOF && c != '\n') { string[i][j] = c; j++; } valid_len[i] = j; // 读到EOF且无有效输入时直接终止 if (c == EOF && j == 0) break; } // 仅输出每行的有效字符 for (i = 0; i < LINE_NUM; i++) { for (j = 0; j < valid_len[i]; j++) { putchar(string[i][j]); } putchar('\n'); } return 0; }
效果验证
输入两行内容C、U时,输出会严格对应两行C、U,符合需求要求。
内容的提问来源于stack exchange,提问作者kiyu sama
相关产品推荐
相关产品推荐

