为什么会出现这个错误,答案不对,是哪里出了问题吗?

怎么个回事,感觉我自己一路代下来没有问题,我m每次循环都重置了啊

img

img

img

找到后,输出位置,不能break;中断读入后续数字的操作,这么改,供参考:

#include <stdio.h>
int main()
{
    int k,i,a,n,key,j,m;
    scanf("%d", &k);
    for (i = 1; i <= k; i++){
        scanf("%d%d", &n, &key);
        for (j = 0,m = 1; j < n; j++){
            scanf("%d", &a);
            if (m && key == a){ //只输出第一次出现的位置
                printf("%d\n", j+1);
                m = 0;
            }
        }
        if (m) printf("-1\n");
    }
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7761128
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:如何不用中断实现按一次按键启停/响应事件
  • 除此之外, 这篇博客: 什么是递归?递归有哪些注意事项?中的 递归的含义 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    程序调用自身的编程技巧称为递归,通常用于把一个复杂的问题层层简化为一个与原问题类似的规模更小的问题来解决。说的有点绕,中国话大概就是大事化小,小事化了。
    我们用一个最简单的递归函数实例:求n的阶乘(n!)来解释一下递归的含义。
    提示:n!=n * (n-1) * (n-2)… * 1
    相当于:n!=n* (n-1!)
    有两种情况:

    • n = 1时 , 1!就是它本身。
    • n>1时,我们只需反复调用递归函数就可以达到求n!的效果。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^