在线编译器 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]; t++; } } c[size]='\0'; } 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` 函数删除元音,最后输出。但 `clear` 函数并没有正确修改原数组,而且 `main` 函数中调用了 `isvovel(c)` 但没有使用返回值,这可能是误写。

- 在 `clear` 函数中,你创建了局部数组 `result` 来存放非元音字符,但最后只将 `c[size]='\0'` 设置为结束符,并没有把 `result` 的内容复制回 `c`。所以原数组 `c` 实际上没有被修改,输出时仍然是原始输入。
- `main` 函数中 `isvovel(c)` 这一行没有实际作用,因为 `isvovel` 期望一个字符参数,但你传入了整个数组,这会导致编译警告或错误。应该删除这一行。