Поиск по структуре не получается - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д