在线编译器 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,answer=0; while((a=getchar())!=EOF){ c[i]=a; i++; } answer=isvovel(c); printf("%s",answer); return 0; }
这段代码试图从输入中删除元音字母并输出结果,但存在几个关键问题。

主要问题在于 `main` 函数最后的逻辑:你调用了 `isvovel(c)` 来判断整个字符串是否为元音,但 `isvovel` 只检查单个字符,而且你把它返回的整数(0或1)直接当作字符串地址传给 `printf`,这会导致程序崩溃或输出乱码。实际上你从未调用过 `clear` 函数来真正删除元音。

- 在 `main` 中,读取完输入后,应该先调用 `clear(c)` 来修改数组 `c`,删除其中的元音字母,然后再用 `printf("%s", c)` 输出处理后的字符串。
- `isvovel` 函数名拼写有误(应为 `isvowel`),但这不是关键错误。注意 `clear` 函数中复制结果时循环条件 `i<size` 可能不够,因为结果数组可能比原数组短,但当前写法会复制原数组长度,导致结果末尾可能有多余字符。不过这不是最紧急的问题。