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 < t; i++) { c[i] = result[i]; } c[t]='\0'; } int main() { char c[1001]; char a; int i = 0; while ((a = getchar()) != EOF) { c[i] = a; i++; } clear(c); printf("%s", c); return 0; }
这段代码的功能是从标准输入读取字符,然后删除所有元音字母(包括大小写的 a、e、i、o、u、y),最后输出处理后的结果。

代码中有一个潜在问题:在 main 函数里,读取字符后没有给字符串末尾添加空字符 '\0',这会导致后续的 sum 函数和 clear 函数无法正确判断字符串的结束位置。

- 在 main 函数的 while 循环结束后,需要手动在 c[i] 位置添加 '\0',否则 sum 函数会一直遍历到内存中碰巧出现 '\0' 的位置,可能造成越界或错误结果。
- 另外,变量 a 被声明为 char 类型,但 getchar() 返回的是 int 类型,用 char 接收可能无法正确判断 EOF(在某些系统上 EOF 是 -1,char 可能无法表示负数)。建议将 a 的类型改为 int。