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

#include <stdio.h> int suma(char a[]) { int i = 0; while (a[i] != '\0' && a[i] != '\n') { i++; } return i; } int sum(char a[], char b[]) { char sizea = suma(a), sizeb = suma(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() { char a[1001] , b[1001], answer = 0; int m,n; int i=0,t=0; while((m=getchar())!=' '){ a[i]=m; i++; } while((n=getchar())!=EOF){ b[t]=n; t++; } //fgets(a,1001, stdin); //fgets(b,1001, stdin); // printf("a = %s\nb = %s\n",a,b); answer = sum(a, b); printf("%d", answer); return 0; }
这段代码试图比较两个字符串,但存在几个问题。

首先,`suma` 函数计算字符串长度时,遇到换行符 `\n` 也会停止,这可能是为了处理 `fgets` 读入的换行。但实际输入读取方式不同,导致长度计算可能不准确。

主要问题在 `main` 函数中读取输入的部分。第一个 `while` 循环以空格作为结束条件,但第二个 `while` 循环以 `EOF` 结束,这意味着第二个字符串会包含末尾的换行符(如果有的话),而第一个字符串不会。这会导致两个字符串长度和内容不匹配。

- 检查输入读取方式:第一个字符串以空格结束,第二个以文件结束符结束,这种不对称可能导致比较时出错。考虑统一输入读取方式。
- 注意 `sum` 函数中返回值的含义:当长度不同时返回较小长度,当长度相同且内容不同时返回第一个不同位置的下标,完全相同时返回 -1。这个逻辑是否符合题目要求?