在线编译器 C

#include <stdio.h> int isvovel(char c){ char *vovel="aeiouyAEIOUY"; while(*vovel){ if(c==*vovel){ return 0; } vovel++; } return 1; } int sum(char c[]){ int i=1001,sum=0; while(c[i]!='\0'){ sum++; i++; } return sum; } void clear(char c){ int size=sum(c[]),t=0; for(int i=0;c[i]!='\0';i++){ if(!isvovel(c[i])){ c[t]=c[i]; t++; } } } int main() { char c[1001]; char a; int i=0; while((a=getchar())!=EOF){ c[i]=a; i++; } c[sum]='\0'; printf("%s",c); return 0; }
这段代码试图从输入中删除所有元音字母(a, e, i, o, u, y 及其大写),但存在多个错误。

主要问题:
- `isvovel` 函数返回 0 表示是元音,返回 1 表示不是元音,但逻辑命名容易混淆。
- `sum` 函数从索引 1001 开始计数,这是错误的,因为数组有效内容从索引 0 开始。
- `clear` 函数接收 `char c` 而不是数组,导致无法正确修改原数组。
- `c[sum]='\0'` 这一行错误地将函数名 `sum` 当作数组索引使用,而不是调用函数。

- 检查 `sum` 函数:它从 `i=1001` 开始循环,但数组 `c` 的有效数据是从索引 0 开始的。想想如何正确计算字符串长度。
- 检查 `clear` 函数的参数类型:它声明为 `char c`,但你应该传入一个字符数组。函数内部也无法正确访问原数组。