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