Онлайн компилятор C

#include <stdio.h> #include <string.h> int main() { char s[1005]; fgets(s, 1005, stdin); int 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] == 'i' || s[i] == 'I' || s[i] == 'o' || s[i] == 'O' || s[i] == 'u' || s[i] == 'U' || s[i] == 'y' || s[i] == 'Y')) { printf("%c", s[i]); } } return 0; }
这段代码的功能是:从标准输入读取一行字符串,然后输出其中所有非元音字母的字符(包括a、e、i、o、u、y及其大写形式)。但代码存在一个问题。

- 注意 `fgets` 会读取换行符 `\n` 并存入字符串中。当遍历到最后一个字符(即换行符)时,它既不是元音字母,所以会被输出,导致输出结果末尾多出一个换行符。你需要考虑如何处理这个多余的换行符。
- 检查循环条件:`len` 是通过 `strlen` 得到的字符串长度,包含了换行符。你可以思考是否应该在循环中排除这个换行符,或者提前调整字符串长度。