Ввод, вывод массива структур, поиск по заданному пользователем полю - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Необходимо написать 3 функции. Ввод, вывод массива структур, поиск по заданному пользователем полю. Проблемма с 3-й функцией. Не могу добиться, что бы поиск работал правильно. Всегда находит совпадение в первом элементе с введённым значением, а когда ищем в полях с символами, то даже вывод работает неправильно. Помогите исправиль ошибку.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
int f=0;
 
struct koshki
{
    char klichka[20];
    char poroda[20];
    int vozrast;
    float ves;
    float dlina;
};
 
void Input(struct koshki*, int);
void Output(struct koshki*, int);
int Find(struct koshki*, int);
 
int main()
{
    int kol = 0, n, i, n1;
    struct koshki A[200];
 
    clrscr();
 
    printf("enter amount elements: ");
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        printf("enter %d element massiva struktur\n", i + 1);
        Input(A, kol);
        kol++;
    }
 
        printf("vivod massiva struktur:\n");
    Output(A, n);
 
    n1=Find(A, n);
 
    if(f==1)
    {
            printf("-----------------------------------------------------------\n");
        printf("| number |  klichka  |  poroda  | vozrast |  ves  | dlina |\n");
        printf("-----------------------------------------------------------\n");
        printf("|%7d |%10s |%9s |%8d |%6.1f |%6.1f |\n",
             n1+1, A[n1].klichka, A[n1].poroda, A[n1].vozrast, A[n1].ves, A[n1].dlina);
        printf("-----------------------------------------------------------\n");
    }
 
    system("pause");
    return 0;
}
 
void Input(struct koshki* array, int number)
{
    int i;
    struct koshki b;
    printf("klichka_koshki: ");
    scanf("%s", &b.klichka);
    printf("poroda_koshki: ");
    scanf("%s", &b.poroda);
    printf("vozrast: ");
    scanf("%d", &b.vozrast);
    printf("ves_v_kg: ");
    scanf("%f", &b.ves);
    printf("dlina_v_sm: ");
    scanf("%f", &b.dlina);
 
    array[number] = b;
}
 
void Output(struct koshki* array, int size)
{
    int i;

    printf("-----------------------------------------------------------\n");
    printf("| number |  klichka  |  poroda  | vozrast |  ves  | dlina |\n");
 
    for (i = 0; i < size; i++)
    {
        printf("-----------------------------------------------------------\n");
        printf("|%7d |%10s |%9s |%8d |%6.1f |%6.1f |\n",
             i + 1, array[i].klichka, array[i].poroda, array[i].vozrast, array[i].ves, array[i].dlina);
    }
    printf("-----------------------------------------------------------\n");
}
 
int Find(struct koshki* array, int size)
{
    int i, p, k1;
    float k2;
    char *str;
 
    printf("vvedite nomer polya dlya poiska:\n"
        " 1 - klichka\n"
        " 2 - poroda\n"
        " 3 - vozrast\n"
        " 4 - ves\n"
        " 5 - dlina\n");
    scanf("%d", &p);
        printf("vvedite iskomiy element: ");
 
    switch(p)
    {
        case 1:
        {
            scanf("%s",&str);
            for(i=0;i<size;i++)
            {
                if(strcmp(array[i].klichka, str)==0);
                {
                    printf("sovpadenie naydeno:\n");
                    f=1;
                    return i;
                }
            }
            break;
        }
        case 2:
        {
                    scanf("%s",&str);
            for(i=0;i<size;i++)
            {
                if(strcmp(array[i].poroda, str)==0);
                {
                    printf("sovpadenie naydeno:\n");
                    f=1;
                    return i;
                }
            }
            break;
        }
        case 3:
        {
            scanf("%d",&k1);
            for(i=0;i<size;i++)
            {
                if(k1==array[i].vozrast);
                {
                    printf("sovpadenie naydeno:\n");
                    f=1;
                    return i;
                }
            }
            break;
        }
        case 4:
        {
            scanf("%f",&k2);
            for(i=0;i<size;i++)
            {
                if(k2==array[i].ves);
                {
                    printf("sovpadenie naydeno:\n");
                    f=1;
                    return i;
                }
            }
            break;
        }
        case 5:
        {
                    scanf("%f",&k2);
            for(i=0;i<size;i++)
            {
                if(k2==array[i].dlina);
                {
                    printf("sovpadenie naydeno:\n");
                    f=1;
                    return i;
                }
            }
            break;
        }
        default: printf("error! vvedite pravilniy nomer polya\n");
    }
 
    printf("sovpadeniy ne naydeno\n");
    return 0;
}

Решение задачи: «Ввод, вывод массива структур, поиск по заданному пользователем полю»

textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
struct koshki
{
   char klichka[20];
   char poroda[20];
   int vozrast;
   float ves;
   float dlina;
};
 
void Input(struct koshki*, int);
void Output(struct koshki*, int);
int Find(struct koshki*, int);
 
int main()
{
   int kol = 0, n, i, n1;
   struct koshki A[200];
 
   printf("enter amount elements: ");
   scanf("%d", &n);
   for (i = 0; i < n; i++)
   {
      printf("enter %d element massiva struktur\n", i + 1);
      Input(A, kol);
      kol++;
   }
 
   printf("vivod massiva struktur:\n");
   Output(A, n);
 
   n1 = Find(A, n);
 
   if (n1 > -1)
   {
      printf("sovpadenie naydeno:\n");
      printf("-----------------------------------------------------------\n");
      printf("| number |  klichka  |  poroda  | vozrast |  ves  | dlina |\n");
      printf("-----------------------------------------------------------\n");
      printf("|%7d |%10s |%9s |%8d |%6.1f |%6.1f |\n",
             n1 + 1, A[n1].klichka, A[n1].poroda, A[n1].vozrast, A[n1].ves, A[n1].dlina);
      printf("-----------------------------------------------------------\n");
   }
   else
   {
      printf("sovpadeniy ne naydeno\n");
   }
 
   system("pause");
   return 0;
}
 
void Input(struct koshki* array, int number)
{
   struct koshki b;
   printf("klichka_koshki: ");
   scanf("%s", b.klichka);
   printf("poroda_koshki: ");
   scanf("%s", b.poroda);
   printf("vozrast: ");
   scanf("%d", &b.vozrast);
   printf("ves_v_kg: ");
   scanf("%f", &b.ves);
   printf("dlina_v_sm: ");
   scanf("%f", &b.dlina);
 
   array[number] = b;
}
 
void Output(struct koshki* array, int size)
{
   int i;
 
 
   printf("-----------------------------------------------------------\n");
   printf("| number |  klichka  |  poroda  | vozrast |  ves  | dlina |\n");
 
   for (i = 0; i < size; i++)
   {
      printf("-----------------------------------------------------------\n");
      printf("|%7d |%10s |%9s |%8d |%6.1f |%6.1f |\n",
             i + 1, array[i].klichka, array[i].poroda, array[i].vozrast, array[i].ves, array[i].dlina);
   }
   printf("-----------------------------------------------------------\n");
}
 
int Find(struct koshki* array, int size)
{
   int i, p, k1;
   float k2;
   char str[256];
 
   printf("vvedite nomer polya dlya poiska:\n"
          " 1 - klichka\n"
          " 2 - poroda\n"
          " 3 - vozrast\n"
          " 4 - ves\n"
          " 5 - dlina\n");
   scanf("%d", &p);
   printf("vvedite iskomiy element: ");
 
   switch (p)
   {
      case 1:
         scanf("%s", str);
         for (i = 0; i < size; i++)
         {
            if (strcmp(array[i].klichka, str) == 0)
            {
               return i;
            }
         }
         break;
 
      case 2:
         scanf("%s", str);
         for (i = 0; i < size; i++)
         {
            if (strcmp(array[i].poroda, str) == 0)
            {
               return i;
            }
         }
         break;
 
      case 3:
         scanf("%d", &k1);
         for (i = 0; i < size; i++)
         {
            if (k1 == array[i].vozrast)
            {
               return i;
            }
         }
         break;
 
      case 4:
         scanf("%f", &k2);
         for (i = 0; i < size; i++)
         {
            if (k2 == array[i].ves)
            {
               return i;
            }
         }
         break;
 
      case 5:
         scanf("%f", &k2);
         for (i = 0; i < size; i++)
         {
            if (k2 == array[i].dlina)
            {
               return i;
            }
         }
         break;
 
      default:
         printf("error! vvedite pravilniy nomer polya\n");
   }
   return -1;
}

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

  1. Ввод, вывод массива структур и поиск по заданному пользователем полю.
  2. Структура koshki содержит поля: klichka (строка, 20 символов), poroda (строка, 20 символов), vozrast (целое число), ves (вес, тип float), dlina (длина, тип float).
  3. Функция Input заполняет поля структуры koshki, используя ввод пользователя.
  4. Функция Output выводит на экран поля структуры koshki.
  5. Функция Find осуществляет поиск в массиве структур по заданному полю.
  6. В начале программы пользователю предлагается ввести количество элементов массива (kol).
  7. Затем пользователю предлагается ввести элемент массива (n).
  8. Далее происходит заполнение массива структур (A) с помощью функции Input.
  9. Выводится на экран весь массив структур с помощью функции Output.
  10. Пользователю предлагается ввести номер поля для поиска (p).
  11. В зависимости от выбранного поля (1-5) происходит поиск в массиве структур с помощью функции Find.
  12. Если элемент найден, его номер выводится на экран, иначе выводится сообщение об ошибке.
  13. Для поиска используется операция сравнения строк (strcmp).
  14. Если количество элементов массива (n) равно 0, выводится сообщение об ошибке.
  15. В конце программы пользователю предлагается нажать любую клавишу для выхода из программы (system(pause)).
  16. Значения переменных (kol, n, i, n1, k1, k2, p) сохраняются в пределах функции main и не сохраняются после ее завершения.
  17. Значения переменных (kol, n, i, n1, k1, k2, p) изменяются в пределах функций Input, Output, Find и не изменяются после их завершения.
  18. Для ввода и вывода данных используются функции scanf и printf соответственно.
  19. Для поиска используется цикл for.
  20. Вложенные массивы структур (в структуре koshki) не используются.

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


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

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

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