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

为何矩阵中存在目标元素却输出Output Element Not Found?

问题原因

  • 核心问题1:Search函数内的循环变量i未初始化就直接参与循环判断,值为内存随机垃圾值,外层循环执行逻辑完全不可控。
  • 核心问题2:main函数中定义的是固定大小的5×5数组matrix[5][5],但Search函数接收的是变长数组形参matrix[][n],会按传入的列数n计算行偏移,和实际数组的行偏移(固定5个元素)不匹配。第一行偏移为0不受影响,从第二行开始寻址位置完全错误,因此找不到非第一行的元素。
  • 附加问题:void main不符合C语言标准写法,标准main函数返回值应为int。

修复后的代码

#include <stdio.h>

// 形参调整为更易读的顺序:行数在前,列数在后
void Search(int rows, int cols, int matrix[][cols], int target) {
    // 显式初始化循环变量
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            if (target == matrix[i][j]) {
                printf("Found");
                return;
            }
        }
    }
    printf("\nNot Found");
}

int main() {
    int rows, col, target;
    printf("Enter size\nrows:");
    scanf("%d", &rows);
    printf("\ncolumns:");
    scanf("%d", &col);
    
    // 按输入的行列数定义变长数组,保证行偏移计算和实际存储一致
    int matrix[rows][col];
    
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < col; j++) {
            scanf("%d", &matrix[i][j]);
        }
    }
    
    // 打印输入的矩阵确认正确性
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < col; j++) {
            printf("%d\t", matrix[i][j]);
        }
        printf("\n");
    }
    
    printf("\nEnter Target:");
    scanf("%d", &target);
    
    // 按形参顺序传递实参
    Search(rows, col, matrix, target);
    return 0;
}

验证说明

使用你提供的测试用例运行:输入2行2列,元素依次为1、2、3、4,搜索目标3时,会正确输出Found。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:15:03