Онлайн компилятор 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; }
这段代码试图从输入中删除所有元音字母,但存在几个关键错误。

首先,`isvovel` 函数返回 0 表示是元音,返回 1 表示不是元音,这与其他地方的逻辑判断相反。在 `clear` 函数中,`if(!isvovel(c[i]))` 会错误地保留元音而删除辅音。

其次,`sum` 函数从索引 1001 开始遍历,这已经越过了数组边界,而且 `c[1001]` 可能不是字符串的结束符,导致未定义行为。同时,`clear` 函数中 `int size=sum(c)` 也使用了这个错误的长度计算。

另外,`clear` 函数接收 `char c` 而不是 `char c[]`,无法正确修改原数组。`main` 函数中 `c[sum]='\0'` 试图用函数名作为索引,这是错误的。

- 检查 `isvovel` 的返回值逻辑:通常返回 1 表示是元音,0 表示不是,这样 `if(isvovel(...))` 才能正确判断。
- 修正 `sum` 函数:应该从索引 0 开始遍历直到遇到 `'\0'`,而不是从 1001 开始。同时确保输入后正确添加字符串结束符。