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

#include <stdio.h> int suma(char a){ int sum=0; while((a=getchar())!=EOF){ sum++; }return sum; } int sumb(char b){ int sum=0; while((b=getchar())!=EOF){ sum++; }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; }
这段代码试图比较两个字符串,但存在多个问题。代码中定义了两个字符数组 `a` 和 `b`,但实际读取时却用整型数组存储字符的ASCII码。`suma` 和 `sumb` 函数会消耗标准输入流中的字符,导致主函数中无法正确读取数据。`sum` 函数中的比较逻辑也不完整,只比较了长度,没有正确比较字符内容。

- 注意 `suma` 和 `sumb` 函数会从 `getchar()` 读取字符,但主函数中也在使用 `getchar()` 读取。这会导致输入流被提前消耗,主函数中读取到的数据可能为空或不完整。思考如何避免这种冲突,比如直接传递数组而不是重新读取输入。

- 在 `sum` 函数中,当 `sizea == sizeb` 时,你试图比较字符数组的内容,但写的是 `if(a!=b)`,这比较的是数组地址而不是元素。你需要逐个比较数组中的字符,比如 `a[i] != b[i]`。另外,这个比较循环的位置在 `if(sizea>sizeb)` 分支之后,但 `return` 语句已经执行,所以后面的代码不会运行。需要重新组织逻辑顺序。