Online Compiler C

#include <stdio.h> int hhh(char c) { int count = 0; char d[] = {'a','e','i','o','u','y','A','E','I','O','U','Y'}; for(int j = 0; j < 6; j++) { if(c ==d[j]) { count++; } } if (count == 0 ) { return 1; } else { return 0; } } int main() { char a[1001],b[1001]; scanf("%[^\n]", a); int len = 0,count = 0; for(int i=0; a[i] != '\0'; i++, len++); for(int i = 0; i < len; i++) { if(hhh(a[i]) == 1) { b[count] = a[i]; count++; } } for(int i = 0; i < count; i++) { putchar(b[i]); } return 0; }
这段代码的功能是:从用户输入的字符串中,删除所有元音字母(包括大小写),然后输出剩下的字符。

代码中有一个明显的逻辑错误。函数 `hhh` 的作用是判断一个字符是否为元音,但它的返回值逻辑反了。当字符是元音时,`count` 会变成 1,然后函数返回 0;当字符不是元音时,`count` 保持 0,函数返回 1。但在 `main` 函数中,只有当 `hhh` 返回 1 时才保留字符,这导致实际上保留了元音字母,删除了辅音字母。

- 检查 `hhh` 函数中 `for` 循环的循环次数。数组 `d` 有 12 个元素,但循环只执行了 6 次,这意味着只检查了小写元音,没有检查大写元音。
- 思考 `hhh` 函数的返回值逻辑。当字符是元音时,应该返回什么值?当字符不是元音时,应该返回什么值?这个逻辑需要和 `main` 函数中的判断条件一致。