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

#include <stdio.h> int main(void) { char s1[1005] = {0}; char s2[1005] = {0}; if (scanf("%[^\n]\n",s1]==0)return 0; if (scanf("%[^\n]",s2]==0)return 0; int i=0 while (s1[i]!='\0'&&s2[i]!='\0'&&s1[i]==s2[i]){ i++; } if (s1[i]=='\0'&&s2[i]=='\0'){ printf("-1\n"); }else{ printf("%d\n", i); } return 0; }
这段代码试图比较两个字符串,找出它们第一个不同字符的位置(从0开始计数),如果完全相同则输出-1。代码中有几个语法错误和逻辑问题。

- 第5行和第6行的`scanf`调用中,括号不匹配。`scanf`的右括号位置错误,导致编译错误。检查`scanf`的括号配对。
- 第7行缺少分号,`int i=0`后面需要加分号。
- 逻辑上,如果两个字符串完全相同,循环结束后`s1[i]`和`s2[i]`都等于`'\0'`,此时输出-1是正确的。但注意`scanf`读取时,第一个`scanf`末尾的`\n`会消耗空白字符,可能导致第二个`scanf`读取空字符串。考虑输入格式是否允许两行字符串中间有空白行。