在线编译器 C

// 删除文本中多余的空格,单词之间只保留一个空格,文本以'.'结尾(输出不包含'.') #include <stdio.h> int main() { char ch; 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`,但并没有在程序开头声明这个变量。C语言要求所有变量在使用前必须先声明。

另外,代码末尾的 `return 0:` 使用了冒号而不是分号,这是语法错误。

- 在 `main` 函数开头,需要先声明 `last_was_space` 变量,并给它一个初始值(比如0),否则编译器不知道这个变量是什么。
- 检查代码中所有的标点符号,确保分号 `;` 和冒号 `:` 没有用错,特别是 `return 0` 后面应该是分号。