在线编译器 C

#include <stdio.h> int isvovel(char c[]){ char *vovel="aeiouyAEIOUY"; while(*vovel){ if(c==*vovel){ return 1; } vovel++; } return 0; } 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; }
这段代码试图从输入中读取字符,然后删除所有元音字母并输出结果。但代码中存在几个问题。

首先,`isvovel` 函数接受一个字符数组 `c[]`,但在比较时却写成了 `if(c==*vovel)`,这里 `c` 是数组名,实际上是一个指针,比较的是地址而不是字符。你应该传入单个字符,而不是整个数组。

其次,`sum` 函数中 `int i=1001` 初始值设置不合理,应该从0开始遍历字符串。而且 `sum` 函数返回的是字符个数,但循环逻辑有误,它从索引1001开始计数,这会导致未定义行为。

另外,`main` 函数中 `c[sum]='\0'` 这一行,`sum` 是函数名而不是变量,这里应该调用 `sum(c)` 来获取字符串长度。

- 检查 `isvovel` 函数的参数类型和比较方式,它应该接收单个字符而不是字符数组。
- 检查 `sum` 函数的循环初始值和逻辑,确保它能正确计算字符串长度。