Поиск по структуре не получается - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Имеется структура в которой нужно найти информацию о студентах по введенном числу массива Y, если число не найдено, то должно выдать соответственное сообщение об этом. Проблема в том, что если записать в структуру более одного студента, а в поиске указать значение для того чтобы нашло 1 студента, то вместе с найденным студентом будет вылезать значение else. Если среди 3 студентов критериям поиска будет удовлетворять второй студент списка, то вывод на экран такой: не найдено информация о студенте не найдено а мне необходимо, чтобы выбивало в случае совпадения только информацию. И только в единственном случае, когда вообще ничего не найдено - выбило бы "не найдено". как так можно сделать?
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
 
struct rab {
    char name [40]; 
    char fam [40]; 
    char o [40];
    int Y[3]; 
};
int main() {
    rab list [10];
    int i, n, z;
    printf ("rabochih = ");
    scanf ("%d", &n);
    rab*p=(rab*)malloc((n+1)*sizeof(rab));
 
    for (i=0; i<n; i++) {
        printf ("Nam: ");
        scanf ("%s", &list[i].name);
        printf ("\n Fam: ");
        scanf ("%s", &list[i].fam);
        printf ("\n obr: ");
        scanf ("%s", &list[i].o);
        printf ("\n y0:");
        scanf ("%d", &list[i].Y[0]);
        printf ("\n y1:");
        scanf ("%d", &list[i].Y[1]);
        printf ("\n y2:");
        scanf ("%d", &list[i].Y[2]);
 
    }
    printf ("\n Input Y[1]: ");
    scanf ("%d", &z);
    for (i=0; i<n; i++) 
    {
if (list[i].Y[1]==z)
    {printf ("nam: %s  fam: %s obr: %s, y0: %d y1 %d y2 %d \n", list[i].name, 
 
list[i].fam, list[i].o, list[i].Y[0], list[i].Y[1], list[i].Y[2]);}
else 
    {printf ("\n ne naideno");}
    }
    getch();
    return 0;
}

Решение задачи: «Поиск по структуре не получается»

textual
Листинг программы
bool found=false;
  for (i=0; i<n; i++) 
    {
            if (list[i].Y[1]==z)
           {
                   printf ("nam: %s  fam: %s obr: %s, y0: %d y1 %d y2 %d \n", list[i].name, 
                    list[i].fam, list[i].o, list[i].Y[0], list[i].Y[1], list[i].Y[2]);
                   found = true;
                   break;
            }
     }
     if(!found) printf ("\n ne naideno");

Объяснение кода листинга программы

В этом коде ищется значение переменной z в массиве структур list. Если значение найдено, то выводится информация о структуре, в которой оно было найдено, и переменная found устанавливается в true. Если значение не найдено, то выводится сообщение ne naideno. Вот список действий, которые происходят в коде:

  1. Переменная found инициализируется значением false.
  2. Происходит цикл по элементам массива list.
  3. Для каждого элемента проверяется, равно ли значение его поля Y[1] искомому значению z.
  4. Если это условие выполняется, то выводится информация о структуре, включая значения полей name, fam, o, Y[0], Y[1] и Y[2].
  5. Переменная found устанавливается в true.
  6. Цикл прерывается с помощью оператора break.
  7. Если после завершения цикла значение переменной found остается равным false, то выводится сообщение ne naideno.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы