C 为什么我能';是否仅获取矩阵中元素的第一次出现?

C 为什么我能';是否仅获取矩阵中元素的第一次出现?,c,C,我是C语言的新手,我正试图制作一个程序来使用矩阵执行一些任务,所以我正在做一个任务来搜索矩阵中的一个元素,并给出元素第一次出现的位置(行、列)。以下是功能: void Do_Search(Matrix M, int row, int col, int elem_search) { int i, j, aux = 0; for(i = 0; i < row; i++) { for(j = 0; j < col; j++) {

我是C语言的新手,我正试图制作一个程序来使用矩阵执行一些任务,所以我正在做一个任务来搜索矩阵中的一个元素,并给出元素第一次出现的位置(行、列)。以下是功能:

   void Do_Search(Matrix M, int row, int col, int elem_search)
   {
   int i, j, aux = 0;

   for(i = 0; i < row; i++)
   {
       for(j = 0; j < col; j++)
       {
           if(M[i][j] == elem_search)
           {
           printf("\nElement first found in [%d][%d]", i, j);
           break;
           }
         }
       }
    }

    void Search_Element(Matrix M, int row, int col){
    int i, j, num_elem, elem_search, elements = row * col;

    while(num_elem > elements || num_elem < 1)
    {
    printf("\nEnter the number of elements to search >> ", element );
    scanf("%d", &num_elem);
    }

    for(i = 0; i < num_elem; i++)
    {
        printf("\n\nEnter the element to search >> ");
        scanf("%d", &elem_search);
        Do_Search(M, row, col, elem_search);
    }
}

我只想得到第一次出现,但是当只有一次出现时,程序给出一个位置,尽管元素数大于2,但程序给出了两个位置。

中断代码语句仅中断内部for循环。因此,for循环的外部(行)将继续运行,因此,如果元素存在于多行中,那么函数将找到所有行

您可能希望
返回一旦找到第一个元素,以便在找到单个匹配项后退出函数

 if(M[i][j] == elem_search)
 {
   printf("\nElement first found in [%d][%d]", i, j);
   return;
 }
您有嵌套的循环。你只是在打破内部循环

因此,您需要一个“stop”变量(例如,
found
)来告诉外部循环在匹配时停止:

void
Do_Search(Matrix M, int row, int col, int elem_search)
{
    int i, j, aux = 0;

    int found = 0;
    for (i = 0; i < row; i++) {
        for (j = 0; j < col; j++) {
            found = (M[i][j] == elem_search);
            if (found) {
                printf("\nElement first found in [%d][%d]", i, j);
                break;
            }
        }
        if (found)
            break;
    }
}
void
Do_搜索(矩阵M、整数行、整数列、整数元素搜索)
{
int i,j,aux=0;
int=0;
对于(i=0;i
我使用booleen变量&我将其初始化为false,如果矩阵中存在元素,booleen变量将初始化为true,并使退出循环(而(I)请提供MCVE
void
Do_Search(Matrix M, int row, int col, int elem_search)
{
    int i, j, aux = 0;

    int found = 0;
    for (i = 0; i < row; i++) {
        for (j = 0; j < col; j++) {
            found = (M[i][j] == elem_search);
            if (found) {
                printf("\nElement first found in [%d][%d]", i, j);
                break;
            }
        }
        if (found)
            break;
    }
}
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

void Do_Search(int row, int col,int M[row][col], int elem_search);

int main(void)
{
int rows, cols;

do
{
      printf("Give me the number of rows :");
      scanf("%d",&rows);
}while(rows<1);

do
{
      printf("Give me the number of cols :");
      scanf("%d",&cols);
}while(cols<1);

int arr[rows][cols];

printf("\nThe filling of the Matrix :\n");
for (int i = 0; i < rows; i++)
{
    for (int j = 0; j < cols; j++)
    {
        scanf("%d", &arr[i][j]);
    }
}

printf("\nDisplay of the Matrix :\n");
for (int i = 0; i < rows; i++)
{printf("\n");
    for (int j = 0; j < cols; j++)
    {
        printf("[%d]",arr[i][j]);
    }
}

printf("\n");
Do_Search(rows,cols,arr,5);
printf("\n");

}

void Do_Search(int row, int col,int M[row][col], int elem_search)
{
int i=0, j=0, aux = 0;
bool found = false;
while(i<row&&found==false)
{j=0;
     while(j<col&&found==false)
     {
          if(M[i][j] == elem_search)
          {
                printf("\nElement first found in [%d][%d]", i, j);
                found=true;
          }
          j++;
     }
     i++;
}

}