Онлайн компилятор C

#include <stdio.h> int suma(char a[]){ int sum=0,i=0; while(a[i]!='\n'){ sum++; i++; }return sum; } int sumb(char b[]){ int sum=0,i=0; while(b[i]!='\0'){ sum++; i++; }return sum; } int sum(char a[],char b[]){ int sizea=suma(a),sizeb=sumb(b); if(sizea>sizeb){ return sizeb; }else return sizea; if(sizea==sizeb){ int size=sizea; for(int i=0;i<size;i++){ if(a!=b){ return i; } } } return -1; } int main() { int a[1001],b[1001],answer=0; char m,n; int i=0,t=0; while((m=getchar())!='\n'){ a[i]=m; printf("%d",a[i]); i++; } while((n=getchar())!=EOF){ b[t]=n; t++; } answer=sum(a,b); printf("%d",answer); return 0; }
这段代码试图比较两个字符串,但存在多个问题。主要思路是:先分别计算两个字符串的长度,然后返回较短的长度,如果长度相等则比较字符并返回第一个不同字符的位置,否则返回-1。但代码中有很多类型错误和逻辑错误。

- 在 `main` 函数中,你声明了 `int a[1001]` 和 `int b[1001]`,但 `sum` 函数期望的参数类型是 `char a[]` 和 `char b[]`。这意味着你传入的是整型数组,但函数内部却当作字符数组处理,这会导致错误的结果。你应该让数组类型保持一致,要么都用 `char`,要么都用 `int`,并相应调整函数。

- 在 `sum` 函数中,当 `sizea > sizeb` 时你返回 `sizeb`,否则返回 `sizea`。但之后还有一个 `if(sizea == sizeb)` 的代码块,这个代码块永远不会被执行,因为前面的 `if-else` 已经覆盖了所有情况(大于或小于等于)。你需要重新组织逻辑,先判断长度是否相等,再决定是比较字符还是返回较短长度。