在线编译器 C

#include <stdio.h> int suma(int a[]){ int sum=0,i=0; while(a[i]!='\n'){ sum++; i++; }return sum; } int sumb(int b[]){ int sum=0,i=0; while(b[i]!=EOF){ 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())!='\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; }
这段代码试图比较两个数组(或字符串)并找出第一个不同元素的位置,但存在几个关键问题。

代码中 `suma` 和 `sumb` 函数本意是计算数组长度,但它们的判断条件有误。`suma` 使用 `'\n'` 作为结束标志,而 `sumb` 使用 `EOF`,但数组 `a` 和 `b` 中存储的是字符,不是换行符或文件结束符。同时,`suma` 和 `sumb` 内部 `sum++` 实际上是在计数,而不是求和,函数名容易引起误解。

- 检查 `suma` 和 `sumb` 的循环条件:数组 `a` 和 `b` 中存储的是从输入读取的字符,它们不会自动包含 `'\n'` 或 `EOF` 作为结束标记。你需要思考如何正确判断数组的有效长度。
- 注意 `main` 中读取输入的方式:第一个 `while` 循环以换行符结束,但换行符本身没有被存入数组;第二个 `while` 循环以 `EOF` 结束。两个数组的长度可能不同,且没有明确的结束标记,这会影响后续比较。