Online Compiler C

// 删除文本中多余的空格,单词之间只保留一个空格,文本以'.'结尾(输出不包含'.') #include <stdio.h> int main() { char ch;//输入字符char int last_was_space ;//当前值为空格: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` 来记录上一个输出的字符是否是空格,但初始值没有设置,这会导致第一次遇到空格时判断出错。另外,代码中只处理了字母和空格,如果输入包含其他字符(如标点符号或数字),它们会被忽略,这可能不是预期的行为。

- 变量 `last_was_space` 在使用前没有初始化,它的初始值是不确定的。你应该在循环开始前给它一个明确的初始值,比如 `0`(表示上一个输出的是字母),这样第一次遇到空格时才能正确判断。
- 循环结束后,你直接 `return 0`,但 `return 0` 应该放在 `while` 循环外面,否则循环只执行一次就结束了。注意检查大括号的配对,确保 `return 0` 不在循环内部。