Напечатать список людей, чье имя совпадает с именем, которое ввел пользователь. - 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 элементов, то цикл завершится раньше. - Код не обрабатывает ситуацию, когда в массиве есть несколько элементов с одинаковыми именами.
- Возможно, в этом коде предполагается, что пользователь вводит имя в переменную