Онлайн компилятор C

#include <stdio.h> int main() { char c; _Bool insideword = 0; do { scanf("%c", &c); int counter = 0; 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; }
这段代码试图从输入中读取字符,直到遇到句点,并尝试处理单词之间的空格。但有几个逻辑问题。

- 第一个条件 `if (c != ' ' || c != '.')` 永远为真,因为一个字符不可能同时等于空格和句点。这导致 `insideword` 总是被设为1,破坏了后续判断。
- 变量 `counter` 在每次循环开始时被重置为0,所以 `while (counter >= 1)` 永远不会执行,无法输出多个空格。
- 当 `insideword` 为0且遇到空格时,你试图输出一个空格,但 `counter` 始终为0,所以没有输出。

- 思考一下:如何正确判断一个字符是单词的一部分还是分隔符?注意 `||` 和 `&&` 的区别。
- 变量 `counter` 的作用是什么?如果只是想输出一个空格,不需要计数循环;如果需要处理多个连续空格,需要让 `counter` 在循环间保持值。