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

#include <stdio.h> int main() { char a[1001] = {0}, b[1001] = {0}; scanf("%s%s", a, b); for (int i = 0; b[i] != '\0' || a[i] != '\0'; i++) { if (a[i] != '\0') { printf("%d", i); break; } } printf("%d", -1); return 0; }
这段代码试图找出字符串 `a` 中第一个非空字符的位置,但逻辑有误。它从 `i=0` 开始循环,只要 `b[i]` 或 `a[i]` 不是结束符就继续,但循环内只检查 `a[i]` 是否非空,一旦发现非空就打印 `i` 并跳出,然后无论是否找到都会打印 `-1`。

- 循环条件 `b[i] != '\0' || a[i] != '\0'` 会导致循环在 `a` 或 `b` 任意一个未结束时继续,但你的意图可能是只遍历 `a`。这可能导致访问 `b` 越界或循环提前结束。
- 你打印 `i` 后立即 `break`,但之后又无条件打印 `-1`,所以即使找到了位置也会输出 `-1`。应该只在没找到时输出 `-1`。