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

#include <stdio.h> #include <string.h> int main() { char s1[1001]; char s2[1001]; gets(s1); gets(s2); 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){ pirntf("%d",len1); if (len1>len2){ printf("%d",len2); } } return 0; }
这段代码试图比较两个字符串,找出它们第一个不同字符的位置,但逻辑上有一些混乱和错误。

- 代码中使用了 `gets` 函数,这个函数不安全,但在学习环境中可能被允许。主要问题在于循环和条件判断的结构:循环内部包含了多个 `if` 语句,其中一些条件(如 `len1==len2`)在每次循环迭代中都会被检查,这不符合逻辑。另外,循环结束后没有处理所有情况,比如当两个字符串完全相同且长度相等时,应该输出 `-1`,但当前代码在循环内就输出了 `-1`,导致可能提前输出。

- 有一个拼写错误:`pirntf` 应该是 `printf`。另外,`if (len1>len2)` 这个条件被放在了 `if (len1<len2)` 的块内,导致它永远不会被执行,因为 `len1` 不可能同时小于和大于 `len2`。

- 提示:
  - 思考一下:比较两个字符串时,应该先找到第一个不同字符的位置,如果所有字符都相同,再根据长度决定输出什么。循环结束后,需要单独处理“完全相同”的情况,而不是在循环内部处理。
  - 注意条件语句的嵌套和逻辑顺序,确保每个分支只在正确的情况下执行。