在线编译器 C

#include <stdio.h> #include <string.h> int main() { char s1[1001]; char s2[1001]; fgets(s1,1001,stdin); fgets(s2,1001,stdin); int len1 = strlen(s1); int len2 = strlen(s2); for (int i = 0; i < len1 && i < len2; i++) { if (s1[i] != s2[i]) { printf("%d", i); return 0; } if (len1 == len2) { printf("-1"); } if (len1 < len2) { printf("%d", len1); } if (len1 > len2) { printf("%d", len2); } } return 0; }
这段代码试图比较两个字符串,找出它们第一个不同字符的位置。但代码的逻辑结构有问题,导致输出可能不正确。

- 循环内部的 `if` 语句和循环外部的 `if` 语句位置混乱。循环内部的 `if` 判断字符是否相等,但循环结束后对字符串长度的判断被错误地放在了循环内部,导致每次循环都会执行这些长度判断,而不是在循环结束后执行一次。
- 循环结束后,应该根据是否找到不同字符以及字符串长度关系来决定输出。当前代码在循环内部就尝试输出结果,并且 `return 0` 只会在找到不同字符时执行,但长度判断语句却写在循环内部,导致逻辑混乱。