首页 > 解决方案 > 为什么即使矩阵中存在元素,我也找不到输出元素?

问题描述

Found如果元素存在于第一行,则以下代码给出输出。当我尝试搜索剩余行中存在的元素时,输出为Not Found. 请帮我解决这个问题。

会议

Enter size
rows:2

columns:2
1 2 3 4

Enter Target:3
1       2
3       4

Not Found

预期产出

Found

这是代码:

#include <stdio.h>

void Search(int n, int m, int matrix[][n], int target) {
    int i, j;
    while (i < m) {
        j = 0;
        while (j < n) {
            if (target == matrix[i][j]) {
                printf("Found");
                return;
            }
            j++;    
        }
        i++;
    }
    printf("\nNot Found");
}

void main() {
    int matrix[5][5];
    int rows, col, target;
    printf("Enter size\nrows:");
    scanf("%d", &rows);
    printf("\ncolumns:");
    scanf("%d", &col);
    
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < col; j++) {
            scanf("%d", &matrix[i][j]);
        }
    }
    
    printf("\nEnter Target:");
    scanf("%d", &target);
    
    Search(col, rows, matrix, target);
}

标签: arrayscmatrixlinear-search

解决方案


代码中存在多个问题:

  • 索引变量i必须在函数0外循环开始之前初始化Searchfor为此使用循环而不是循环更不容易出错while

  • 为会话发布的输出与发布的代码不一致。显示了矩阵内容,但没有生成此输出的代码。

  • 的原型main应该是int main(void)int main(int argc, char *argv[])等价的。void不是此函数的正确返回类型。

  • 传递给的矩阵Search大小为 5 行 5 列,但您告诉函数一个不同的大小:2 行和 2 列,作为参数传递,C99 原型告诉编译器列数n的值为2. 这导致了问题。您应该定义Searchvoid Search(int n, int m, int matrix[][5], int target)或定义matrix为适当的大小。

这是修改后的版本:

#include <stdio.h>

void Search(int n, int m, int matrix[][n], int target) {
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (target == matrix[i][j]) {
                printf("Found\n");
                return;
            }
        }
    }
    printf("Not Found\n");
}

int main(void) {
    int rows, cols, target;

    printf("Enter size\nrows: ");
    if (scanf("%d", &rows) != 1 || rows <= 0)
        return 1;

    printf("\ncolumns: ");
    if (scanf("%d", &cols) != 1 || cols <= 0)
        return 1;

    int matrix[rows][cols];
    
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            if (scanf("%d", &matrix[i][j]) != 1)
                return 1;
        }
    }
    
    printf("\nEnter Target:");
    if (scanf("%d", &target) != 1)
        return 1;

    Search(cols, rows, matrix, target);
    return 0;
}

推荐阅读