在线编译器 C

// 删除文本中多余的空格,单词之间只保留一个空格,文本以'.'结尾(输出不包含'.') #include <stdio.h> int main() { char ch;//输入字符char int last_was_space =0;//当前值为空格:last_was_space =0 //当前值不为空格:last_was_space =1 while (1) // 无限循环,遇到 '.' 时跳出 { scanf("%c", &ch); // 逐个字符读入 // 放在循环内部,程序需要逐个字符地读取输入 if (ch == '.') //遇到.跳出循环 { break; } if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')) //输入字符为大小写字母 { printf("%c", ch); // 直接输出字母 last_was_space = 0;//0 代表 “上一个输出的是字母”(不是空格) 1 代表 “上一个输出的是空格” } else if (ch == ' ') //输入字符为空格 { if (last_was_space == 0) { printf(" ");//输出空格 last_was_space = 1; //1 代表 “上一个输出的是空格” } } return 0; }
这段代码试图实现删除文本中多余空格的功能,但存在几个问题。

代码的逻辑是:遇到字母直接输出,遇到空格时检查上一个输出的是否是空格,如果是则跳过,否则输出一个空格。但代码中 `last_was_space` 的注释和实际使用有矛盾,而且循环结构不完整。

- 循环的 `return 0;` 被放在了 `while` 循环内部,导致第一次遇到空格以外的字符后程序就会结束,无法处理后续输入。
- `last_was_space` 的初始值设为0,但注释说“当前值为空格:last_was_space =0”,而实际逻辑中0表示上一个输出的是字母,1表示上一个输出的是空格,注释与代码含义相反,容易造成混淆。