Напечатать список людей, чье имя совпадает с именем, которое ввел пользователь. - 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("Нету");

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

В этом коде:

  1. Объявлены две переменные: i и found.
  2. Переменная i используется как счётчик в цикле, а found — для подсчёта числа людей с одинаковыми именами.
  3. Используется цикл for для прохода по массиву a (предполагается, что a — это массив структур, содержащих поля name и z).
  4. Внутри цикла выполняется проверка: если имена в a[i].name и z совпадают (сравниваются при помощи функции strcmp), то выводится сообщение Попался и увеличивается счётчик found.
  5. После цикла проверяется значение переменной found. Если она больше нуля, то выводится сообщение Набралось [важно_значение] гавриков, иначе выводится сообщение Нету. Следует обратить внимание на то, что:
    • Возможно, в этом коде предполагается, что пользователь вводит имя в переменную z.
    • Код предполагает, что массив a содержит 10 элементов. Если в массиве будет меньше 10 элементов, то цикл завершится раньше.
    • Код не обрабатывает ситуацию, когда в массиве есть несколько элементов с одинаковыми именами.

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


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

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

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