Online Compiler 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(int a[],int 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[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` 函数用 `'\n'` 作为结束条件,而 `sumb` 用 `'\0'` 作为结束条件,这会导致两个函数对同一个数组的行为不一致。实际上,`main` 中读取第一个数组时遇到换行就停止,但并没有在数组末尾添加 `'\0'`,所以 `sumb` 函数在计算第二个数组大小时会出错。

其次,`sum` 函数中,当 `sizea` 和 `sizeb` 不相等时,它返回较小的那个大小,但之后还有一段比较相等情况的代码,这段代码永远不会执行,因为前面的 `if-else` 已经返回了。

- 检查 `suma` 和 `sumb` 的结束条件是否与 `main` 中实际存储的数据匹配。`main` 中第一个数组没有存储换行符,也没有添加字符串结束符。
- 注意 `sum` 函数中,一旦执行了 `return`,后面的代码就不会再运行。你需要重新设计逻辑,让所有情况都能被正确处理。