Online Compiler C

#include <stdio.h> int main() { char a[1001],b[1001]; char c[6] = {'a','e','i','o','u','y'}; scanf("%[^\n]", a); //printf("%s", a); int len = 0,count = 0; for(int i=0; a[i] != '\0'; i++, len++); for(int i = 0; i < len; i++) { for(int j; j< 6; j++) { if(a[i] !=c[j]) { b[count]=a[i]; count++; } } } for(int i = 0; i < count; i++) { putchar(b[i]); } return 0; }
这段代码的目的是从输入的字符串中删除所有元音字母(包括'y'),然后输出结果。但代码中存在逻辑错误,导致输出结果不正确。

主要问题在于内层循环的判断逻辑。代码试图检查当前字符是否不等于任何一个元音字母,但这种方式会导致每个字符被多次写入数组b,而且判断条件不成立时也会错误地写入。

- 内层循环中变量j没有初始化,这会导致未定义行为。在使用j之前应该先赋初值0。
- 判断字符是否为元音的逻辑有误。当前写法会在字符不等于某个元音时立即将其加入结果数组,但正确的做法应该是先检查字符是否等于任何一个元音,只有都不相等时才加入结果。