Online Compiler C

#include <stdio.h> int main() { char s[1001]; int len = 0, i; scanf("%[^\n]", s); while (s[len] != 'a'&&s[len] != 'e'&&s[len] != 'i'&&s[len] != 'o'&&s[len] != 'u'&&s[len] != 'y') { printf("%d",s[len]) len++; } return 0; }
这段代码试图读取一行字符串,然后输出第一个非元音字母(包括y)的ASCII码值。但代码有几个问题。

- 代码中 `printf` 语句末尾缺少分号,会导致编译错误。
- 循环条件检查的是“不是元音”就继续循环,但循环体里却打印了当前字符,这会导致打印所有非元音字符,而不是只打印第一个。
- 循环结束后没有处理字符串结束符 `\0` 的情况,如果字符串全是元音,循环会越界访问数组。

- 检查 `printf` 语句是否缺少分号。
- 思考如何只输出第一个符合条件的字符,而不是所有符合条件的字符。