Онлайн компилятор 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` 被设为0,但紧接着的 `if (insideword && c != ' ') ` 条件会检查 `insideword` 是否为真,此时它已经是假,所以不会打印空格。但后面的 `else` 分支中,你试图用 `counter` 来记录空格数量并打印,但 `counter` 的更新和 `while` 循环的位置可能不正确,导致空格打印逻辑混乱。

- 另外,`while (counter >= 1)` 这个循环会无限打印空格,因为 `counter` 在循环内没有减少,而且每次遇到空格都会增加 `counter`,但打印后没有重置。这会导致程序卡住或输出大量多余空格。