#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 )
{
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", amp;num_elem);
}
for(i = 0; i < num_elem; i )
{
printf("nnEnter the element to search >> ");
scanf("%d", amp;elem_search);
Do_Search(M, row, col, elem_search);
}
}
В
if(M[i][j] == elem_search)
{
printf("nElement first found in [%d][%d]", i, j);
break;
}
Я хотел бы просто получить первое вхождение, но программа выдает одну позицию, когда есть только одно вхождение, и двухпозиционную, несмотря на то, что количество элементов превышает 2.
Комментарии:
1. Пожалуйста, предоставьте MCVE
Ответ №1:
break;
Оператор только выходит из внутреннего цикла for. Итак, внешний (строковый) цикл for продолжает выполняться, и, следовательно, если элемент существует в нескольких строках, ваша функция найдет их все.
Вероятно, вы захотите return;
, как только найдете первый элемент, чтобы выйти из функции после нахождения одного вхождения.
if(M[i][j] == elem_search)
{
printf("nElement first found in [%d][%d]", i, j);
return;
}
Ответ №2:
У вас есть вложенные циклы. Вы выходите только из внутреннего цикла.
Итак, вам нужна переменная «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;
}
}
Ответ №3:
Я использую переменную booleen и инициализирую ее значением false , если элемент существует в матрице, переменная booleen инициализируется значением true, и он выполняет выход из цикла (while(i<строка) amp; while(j<col))
#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",amp;rows);
}while(rows<1);
do
{
printf("Give me the number of cols :");
scanf("%d",amp;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", amp;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<rowamp;amp;found==false)
{j=0;
while(j<colamp;amp;found==false)
{
if(M[i][j] == elem_search)
{
printf("nElement first found in [%d][%d]", i, j);
found=true;
}
j ;
}
i ;
}
}