Онлайн компилятор 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++; } while((n=getchar())!=EOF){ b[t]=n; t++; } answer=sum(a,b); printf("%d",answer); return 0; }
这段代码试图比较两个从标准输入读取的字符序列,并找出它们第一次出现不同字符的位置。但代码中存在几个逻辑和实现上的问题。

- 函数 `suma` 和 `sumb` 使用 `while(a[i]!='\0')` 来统计数组长度,但数组 `a` 和 `b` 中存储的是从 `getchar()` 读取的字符,并没有在末尾添加字符串结束符 `'\0'`,因此循环条件永远不会满足,导致长度计算错误。
- 在 `main` 函数中,第一个 `while` 循环读取字符直到 EOF,但第二个 `while` 循环在第一个循环结束后才开始读取,此时输入流可能已经到达末尾,导致第二个数组 `b` 无法读取到任何数据。
- 函数 `sum` 的返回值逻辑不清晰:它返回较小数组的长度,或者返回第一个不同字符的位置,或者返回 -1。但题目要求可能只是找出第一个不同字符的位置,需要明确目标。

- 检查 `suma` 和 `sumb` 函数中的循环条件:数组中没有 `'\0'` 结束符,应该用什么条件来判断数组的有效长度?
- 思考如何同时读取两个数组的数据:当前代码先读完第一个数组再读第二个,但输入流是连续的,这样第二个数组可能读不到内容。是否需要改变读取方式?