C语言 尝试在二维数组中搜索元素

vyswwuz2  于 2023-05-22  发布在  其他
关注(0)|答案(1)|浏览(151)

我是一个初学者在c语言,并试图使一个代码,其中搜索一个元素在2d数组和它不工作。如果你看到的问题,请帮助。

#include <stdio.h>
void main()
{
int arr[2][3]={{1,2,3},{4,5,6}};
printf("enter your number\n");
int n,row,column,i,j,flag=0;
scanf("%d",&n);

row = sizeof(arr)/sizeof(arr[0]);
column = sizeof(arr[0])/row;

for(i=0;i<row;i++)
{
    for(j=0;j<column;j++)
    {
        if(n==arr[i][j])
        {
            printf("the number is at index\n %d %d",i,j);
            flag=1;
            break;
        }
   
        if(flag==0)
        printf("this is not in the program\n");
        break;
    }
}

}
uyhoqukh

uyhoqukh1#

如果你不是在搜索第一个元素(arr[0][0]处的值),那么第一次迭代中的第一个if将不会被计算为trueflag也不会被设置为1。因此,第二个if的主体将被执行,输出总是"this is not in the program\n"。除此之外,我猜你希望你的break在那之后在if的范围内。
因此,实际上,您需要将第二个if和属于它的代码移动到代码的末尾,以获得所需的结果。
我不确定你是否只想打印第一个找到的元素的索引。但我猜你只想要一个,因为你的break在第一个if的身体?
如果是这样,你也需要退出外部的for循环。然后,您的代码可能看起来像这样:

#include <stdio.h>

void main()
{
    int arr[2][3] = { {1,2,3},{4,5,6} };
    int n, row, column, i, j, flag = 0;

    printf("enter your number\n");
    scanf("%d", &n);

    row = sizeof(arr) / sizeof(arr[0]);
    column = sizeof(arr[0]) / row;

    for (i = 0; i < row; i++)
    {
        for (j = 0; j < column; j++)
        {
            if (n == arr[i][j])
            {
                printf("the number is at index\n %d %d", i, j);
                flag = 1;
                break;
            }
        }

        if (flag != 0)
            break;
    }

    if (flag == 0)
        printf("this is not in the program\n");
}

顺便问一下,如果这两个值都已经被硬编码了,那么计算rowcolumn的意义是什么?我建议你可以将它们改为const int s并使用它们来创建你的数组。你可以有你的变量定义,然后像下面这样:

const int row = 2;
const int column = 3;
int arr[row][column] = { {1,2,3},{4,5,6} };
int n, i, j, flag = 0;

相关问题