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

#include <stdio.h> int main() { int ch; int in_space = 0; while ((ch = getchar()) != EOF) { if (ch == '.') { break; } if (ch == '.') { if (in_space == 0) { printf("%c", ch); in_space = 1; } } else { printf("%c", ch); in_space = 0; } } printf("\n"); return 0; }
这段代码试图从输入中读取字符,遇到句点就停止,并尝试压缩连续的空格。但代码中存在逻辑错误。

- 第一个 `if (ch == '.')` 会直接跳出循环,导致第二个 `if (ch == '.')` 永远不会执行,所以空格压缩的逻辑完全无效。
- 变量 `in_space` 的初始值为0,但代码中并没有处理空格字符(如空格或制表符)的判断,而是错误地使用了句点字符。

- 检查你用来判断“空格”的条件:当前代码判断的是 `ch == '.'`,但空格字符应该是 `' '` 或 `'\t'` 等。
- 注意两个 `if (ch == '.')` 的顺序:第一个会直接 `break`,导致第二个永远不会执行。你需要重新组织条件判断的顺序。