Online Compiler C

#include <ctype.h> #include <stdio.h> int main(void) { char ch; int first = 1; int space_mark = 0; while ((ch = getchar()) != '.') { if (isspace(ch)) { space_mark = 1; } else if (isalpha(ch)) { if (space_mark && !first) { putchar(' '); } putchar(ch); first = 0; space_mark = 0; } else continue; } putchar('\n'); return 0; }
这段代码的功能是从输入中读取字符,直到遇到句点为止,然后输出处理后的结果。它试图实现的效果是:只输出字母字符,并在每个单词之间添加一个空格,但会去掉多余的空格和标点符号。

代码中有一个逻辑问题:当遇到非字母、非空格的字符(比如标点符号)时,会执行 `continue`,但此时 `space_mark` 的状态没有被重置。这可能导致后续单词前错误地添加空格。

- 检查当遇到非字母、非空格的字符时,是否应该重置 `space_mark` 为 0,以避免这些字符影响单词之间的空格判断。
- 思考 `first` 变量的作用:它用于避免在第一个单词前输出空格。但当前逻辑中,如果输入的第一个字符是空格,`first` 仍为 1,后续遇到字母时不会输出空格,这是正确的。但考虑一下,如果输入以标点符号开头,`first` 是否应该保持为 1?