Online Compiler 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=0,sum=0; while(c[i]!='\0'){ sum++; i++; } return sum; } void clear(char c[]){ int size=sum(c),t=0; char result[1001]={0}; for(int i=0;i<size;i++){ if(!isvovel(c[i])){ result[t++]=c[i]; } } result[t]='\0'; for(int i=0;i<size;i++){ c[i]=result[i]; } } int main() { char c[1001]; char a; int i=0; while((a=getchar())!=EOF){ c[i]=a; isvovel(c); i++; } printf("%s",c); return 0; }
这段代码试图从输入中删除所有元音字母,但存在几个问题。

代码的主要流程是:从标准输入读取字符存入数组,然后调用 `clear` 函数删除元音,最后输出结果。但 `main` 函数中并没有调用 `clear`,而是调用了 `isvovel`,这个调用没有实际作用。

- 在 `main` 函数中,你调用了 `isvovel(c)`,但 `isvovel` 期望一个字符参数,而你传入的是整个数组,这会导致类型不匹配。同时,这个调用也没有使用返回值,所以它没有任何效果。你应该在读取完所有字符后调用 `clear` 函数。

- `clear` 函数中,最后将 `result` 复制回 `c` 时,循环条件是 `i < size`,但 `result` 的长度可能小于 `size`,这样会把 `result` 中没有赋值的元素(即 `\0`)也复制过去,导致数组末尾出现多余的 `\0`。你应该只复制 `t` 个字符,然后手动添加字符串结束符。