【问题标题】:Why am I getting Output Element Not Found Even If Element is Present in Matrix?为什么即使矩阵中存在元素,我也找不到输出元素?
【发布时间】:2021-11-02 20:07:53
【问题描述】:

如果元素存在于第一行,则以下代码给出输出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);
}

【问题讨论】:

  • @user3121023 仍然得到相同的输出
  • 矩阵尺寸
  • 编辑问题以提供minimal reproducible example,包括所有输入的准确文本、观察到的输出以及预期的输出。显示完整的源代码,包括问题中当前代码中缺少的#include &lt;stdio.h&gt;。还将void main() 更改为int main(void)

标签: arrays c matrix linear-search


【解决方案1】:

代码中存在多个问题:

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

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

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

  • 传递给Search 的矩阵大小为 5 行 5 列,但你告诉函数一个不同的大小:2 行 2 列,作为参数传递,C99 原型告诉编译器列数是n,值为2。这导致了问题。您应该将Search 定义为void 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;
}

【讨论】:

  • @GaneshDeshmukh:您可以通过单击其分数下方的灰色复选标记来接受此答案。
猜你喜欢
  • 2021-02-20
  • 1970-01-01
  • 2022-01-24
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多