在线编译器 C

#include <stdio.h> int suma(int a[]){ int sum=0,i=0; while(a[i]!='\0'){ sum++; i++; }return sum; } int sumb(int b[]){ int sum=0,i=0; while(b[i]!='\0'){ sum++; i++; }return sum; } int sum(int a[],int b[]){ int sizea=suma(a),sizeb=sumb(b); if(sizea>sizeb){ return sizeb; }if (sizea<sizeb){ return sizea; } if(sizea==sizeb){ int size=sizea; for(int i=0;i<size;i++){ if(a[i]!=b[i]){ return i; } } } return -1; } int main() { int a[1001],b[1001],answer=0; char m,n; int i=0,t=0; while((m=getchar())!=EOF){ a[i]=m; printf("%d",a[i]); i++; } a[i]='0'; while((n=getchar())!=EOF){ b[t]=n; t++; } b[i]=0; answer=sum(a,b); printf("%d",answer); return 0; }
这段代码试图比较两个整数数组,但存在几个关键问题。

代码中 `suma` 和 `sumb` 函数本意是计算数组长度,但内部逻辑错误:它们用 `sum++` 来计数,实际上应该用 `i` 来计数,并且循环条件 `a[i]!='\0'` 对整数数组不适用,因为整数数组通常不以 `'\0'` 结尾。

- 在 `suma` 和 `sumb` 函数中,你使用了 `sum++` 来计数,但变量 `sum` 初始为0,每次循环加1,这实际上是在计算元素个数,但你应该直接返回 `i` 而不是 `sum`。同时,循环条件 `a[i]!='\0'` 对整数数组无效,因为整数数组没有字符串结束符的概念。

- 在 `main` 函数中,你使用 `getchar()` 读取字符并存入整数数组,但 `getchar()` 返回的是字符的ASCII码,而数组元素类型是 `int`,这会导致数据含义混乱。另外,第一个循环结束后用 `a[i]='0'` 作为结束标记,但第二个循环却没有对应的结束标记,导致 `sumb` 函数可能越界访问。