C语言输入字符串逐词打印问题:多空格分隔时出现多余空行如何修复?
问题修复方案
问题原因
现有代码的逻辑是每遇到一个空格就输出一次换行,所以单词间的多个连续空格会对应输出多个连续换行,最终出现多余空行。你代码中已经定义了inw(标记是否处于单词内部)变量,刚好可以用来解决这个问题。
修复思路
通过inw变量记录当前字符的状态:
- 只有当从「单词内部」第一次遇到空格时,才输出换行
- 连续遇到多个空格时,仅第一个空格触发换行,后续空格直接跳过
- 额外优化:替换已被C标准废弃的
gets()函数为更安全的fgets(),避免缓冲区溢出风险
修复后完整代码
#include <stdio.h> int main() { int inw = 0, i = 0; char s[10000]; printf("Print string (max 10000 char):\n"); // 替换gets为fgets,避免缓冲区溢出 fgets(s, sizeof(s), stdin); while (s[i] != '\0') { if (s[i] != ' ' && s[i] != '\t' && s[i] != '\n') { inw = 1; putchar(s[i]); } else { // 只有当前处于单词内时,遇到分隔符才输出换行 if (inw == 1) { printf("\n"); inw = 0; } } i++; } return 0; }
修改点说明
- 启用
inw状态标记:进入单词时设为1,离开单词输出换行后设为0 - 调整空格判断逻辑:仅首次遇到单词分隔符时输出换行,连续分隔符不重复输出
- 替换
gets()为fgets():解决原函数的缓冲区溢出安全隐患
内容的提问来源于stack exchange,提问作者KoraOnEarth
相关产品推荐
相关产品推荐

