在线编译器 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++; } clear(c); answer=isvovel(c); printf("%d",answer); return 0; }
这段代码的目的是从输入中读取字符,删除所有元音字母,然后判断处理后的字符串的第一个字符是否为元音。但代码中存在逻辑错误。

主要问题在于 `main` 函数中:调用 `clear(c)` 删除了元音后,又调用 `isvovel(c)` 来判断整个字符串的第一个字符是否为元音。但 `isvovel` 函数只检查单个字符,而这里传入的是整个字符串,实际上只检查了字符串的第一个字符。而且这个检查结果与题目要求可能不符。

另外,`clear` 函数在复制结果回原数组时,循环条件 `i<size` 可能不够,因为结果数组长度可能小于原数组,但原数组末尾未被覆盖的部分会残留旧数据。不过由于后面只用到第一个字符,这个错误暂时不影响输出。

- 检查 `main` 函数中 `answer=isvovel(c);` 这一行。`isvovel` 函数期望一个字符,但你传入了一个字符串。这会导致只检查字符串的第一个字符,而不是整个字符串。
- 思考一下题目真正要求你做什么:是判断整个字符串中是否包含元音,还是判断第一个字符?根据代码逻辑,你似乎想判断删除元音后的字符串是否以元音开头,但函数调用方式不对。