You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linear搜索始终返回-1求助:函数仅执行else分支未触发匹配逻辑

你的线性搜索总是返回-1?问题出在这儿!

嘿,我一眼就瞅出你代码里的问题啦!你的线性搜索函数犯了个超容易踩的小错误——你把return -1放在了循环的else分支里,这直接导致函数根本没机会遍历整个数组!

问题根源

正常的线性搜索逻辑应该是:

  • 遍历数组里的每一个元素
  • 找到和目标值匹配的元素,立刻返回它的索引
  • 等整个数组都遍历完了还没找到匹配项,再返回-1表示目标不存在

但你现在的代码里,循环第一次执行时,只要第一个元素v[0]不等于目标值n,就会直接进入else分支返回-1,后面的元素连被检查的机会都没有!这就难怪每次搜索都返回-1了。

修正后的代码

把return -1移到循环外面,让函数只有在遍历完所有元素都没找到匹配项时才返回-1:

#include <stdio.h>
#include <stdlib.h>
#define size 50000

int search(int n, int s, int v[s]) {
    int i;
    for(i = 0; i < s; ++i) {
        if(v[i] == n) {
            return i; // 找到匹配项,返回索引
        }
        // 不匹配就继续循环下一个元素,这里别放return!
    }
    // 遍历完整个数组都没找到,才返回-1
    return -1;
}

int main(void) {
    int valores[size];
    // 初始化向量并赋值
    for(int i = 0; i < size; ++i)
        valores[i] = (i + 1) * 2;
    
    // 举个测试例子:搜索值为4的元素,应该返回索引1
    int result = search(4, size, valores);
    printf("搜索结果:%d\n", result); // 正确输出应为1
    return 0;
}

额外小提醒

C语言里函数参数的数组写法int v[s]其实等价于int *v,两种写法都能用,这不影响搜索逻辑,只是个小知识点~

内容的提问来源于stack exchange,提问作者user7391306

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:32:15