Напечатать список людей, чье имя совпадает с именем, которое ввел пользователь. - C (СИ)
Формулировка задачи:
Задание следующее:
Набросал следующий код:
Результат исполнения в аттаче.
Вопроса два: почему структура так не любит Константина Черненко и почему вылетает после ввода имени?
Объявить структуру, содержащую строки, соответствующие имени и фамилии человека. Создать массив из 10 таких структур, инициализировать их именами и фамилиями любых известных людей. Напечатать список людей, чье имя совпадает с именем, которое ввел пользователь.
#include "string.h" main() { int i, b; char z; struct people { char name[10]; char surname[10]; }; struct people a[10]={{"Иосиф", "Сталин"}, {"Владимир", "Ленин"}, {"Георгий", "Маленков"}, {"Никита", "Хрущев"}, {"Леонид", "Брежнев"}, {"Юрий", "Андропов"}, {"Константин", "Черненко"}, {"Михаил", "Горбачев"}, {"Владимир", "Путин"}, {"Дмитрий", "Медведев"}}; for(i=0; i < 10; i++) // Проверка заполнения массива printf("%s %s\n", a[i].name, a[i].surname); printf("Введите имя: "); scanf("%s", z); for(i=0; i <= 10; i++) // Сверяем со структорой { if (i < 10) { if (strcmp(a[i].name, z)==0) // Проверка на совпадения printf("%s %s\n", a[i].name, a[i].surname); } else printf("Совпадений нет"); // Совпадений нет } }
Решение задачи: «Напечатать список людей, чье имя совпадает с именем, которое ввел пользователь.»
textual
Листинг программы
int i, found; for ( i = found = 0; i < 10; ++i ) { if ( ! strcmp(a[i].name, z) ) { printf("Попался"); ++found; } } if ( found ) printf("Набралось %d гавриков", found); else printf("Нету");
Объяснение кода листинга программы
В этом коде:
- Объявлены две переменные:
i
иfound
. - Переменная
i
используется как счётчик в цикле, аfound
— для подсчёта числа людей с одинаковыми именами. - Используется цикл
for
для прохода по массивуa
(предполагается, чтоa
— это массив структур, содержащих поляname
иz
). - Внутри цикла выполняется проверка: если имена в
a[i].name
иz
совпадают (сравниваются при помощи функцииstrcmp
), то выводится сообщениеПопался
и увеличивается счётчикfound
. - После цикла проверяется значение переменной
found
. Если она больше нуля, то выводится сообщениеНабралось [важно_значение] гавриков
, иначе выводится сообщениеНету
. Следует обратить внимание на то, что:- Возможно, в этом коде предполагается, что пользователь вводит имя в переменную
z
. - Код предполагает, что массив
a
содержит 10 элементов. Если в массиве будет меньше 10 элементов, то цикл завершится раньше. - Код не обрабатывает ситуацию, когда в массиве есть несколько элементов с одинаковыми именами.
- Возможно, в этом коде предполагается, что пользователь вводит имя в переменную
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д