Онлайн компилятор 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; }
这段代码试图读取一行字符串,然后输出其中非元音字母的ASCII码。但代码存在语法错误和逻辑问题。

- 第8行的while循环缺少左花括号,导致循环体只有printf那一行,而len++被放在了循环外面,且第10行多了一个多余的右花括号。
- 循环条件只检查了当前字符是否为元音,但循环内部没有更新len,如果第一个字符是元音,循环会直接跳过;如果不是元音,会无限打印同一个字符的ASCII码。
- 循环结束后没有处理字符串的终止符'\0',可能导致越界访问。