在线编译器 C

#include <stdio.h> #include <string.h> int main() { char s[1005]; fgets(s, 1005, stdin); len = strlen(s); for (int i = 0; i < len; i++) { if (s[i] == 'a' || s[i] == 'A' || s[i] == 'e' || s[i] == 'E' || s[i] == 'o' || s[i] == 'O' || s[i] == 'i' || s[i] == 'I' || s[i] == 'u' || s[i] == 'U' || s[i] == 'y' || s[i] == 'Y') { i++ } printf("%c", s[i]); } return 0; }
这段代码试图从输入中删除所有元音字母(包括y),然后输出剩余字符。但代码有几个问题。

- 第7行:变量 `len` 没有声明类型,应该写成 `int len = strlen(s);`。
- 第14行:`i++` 后面缺少分号,导致语法错误。
- 逻辑问题:当遇到元音时,你让 `i++` 跳过一个字符,但循环本身也会让 `i++`,这样会跳过两个字符。而且你直接 `printf` 了当前字符,即使它是元音也会被输出。

- 提示1:检查变量声明和语句结尾的分号,确保代码能编译。
- 提示2:思考如何跳过元音字母而不输出它们,注意循环中 `i` 的递增方式。