在线编译器 C

#include <stdio.h> int main() { char c; _Bool insideword = 0; int counter = 0; do { scanf("%c", &c); if (c != ' ' && c != '.') { insideword = 1; } if (c == ' ') { insideword = 0; } if (insideword && c != ' ') { printf("%c", c); } else { if (insideword == 0 && c == ' ') { counter++; while (counter >= 1) { printf(" "); } } } } while (c != '.'); return 0; }
这段代码试图从输入中读取字符,直到遇到句点,并处理单词之间的空格。但逻辑上有几个问题,导致输出不符合预期。

- 变量 `insideword` 的更新逻辑有误。当遇到空格时,你立即将 `insideword` 设为0,但此时可能已经输出了当前字符。你需要重新考虑何时开始记录单词、何时结束,以及何时输出字符的顺序。
- 处理空格的循环 `while (counter >= 1)` 会无限循环,因为 `counter` 在循环内没有改变。而且你试图用 `counter` 来计数空格数量,但每次遇到空格都增加 `counter`,然后打印多个空格,这会导致每个单词之间输出越来越多的空格。你应该只输出一个空格来分隔单词,而不是多个。