Ввод, вывод массива структур, поиск по заданному пользователем полю - 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;
- }
Объяснение кода листинга программы
- Ввод, вывод массива структур и поиск по заданному пользователем полю.
- Структура koshki содержит поля: klichka (строка, 20 символов), poroda (строка, 20 символов), vozrast (целое число), ves (вес, тип float), dlina (длина, тип float).
- Функция Input заполняет поля структуры koshki, используя ввод пользователя.
- Функция Output выводит на экран поля структуры koshki.
- Функция Find осуществляет поиск в массиве структур по заданному полю.
- В начале программы пользователю предлагается ввести количество элементов массива (kol).
- Затем пользователю предлагается ввести элемент массива (n).
- Далее происходит заполнение массива структур (A) с помощью функции Input.
- Выводится на экран весь массив структур с помощью функции Output.
- Пользователю предлагается ввести номер поля для поиска (p).
- В зависимости от выбранного поля (1-5) происходит поиск в массиве структур с помощью функции Find.
- Если элемент найден, его номер выводится на экран, иначе выводится сообщение об ошибке.
- Для поиска используется операция сравнения строк (strcmp).
- Если количество элементов массива (n) равно 0, выводится сообщение об ошибке.
- В конце программы пользователю предлагается нажать любую клавишу для выхода из программы (system(
pause
)). - Значения переменных (kol, n, i, n1, k1, k2, p) сохраняются в пределах функции main и не сохраняются после ее завершения.
- Значения переменных (kol, n, i, n1, k1, k2, p) изменяются в пределах функций Input, Output, Find и не изменяются после их завершения.
- Для ввода и вывода данных используются функции scanf и printf соответственно.
- Для поиска используется цикл for.
- Вложенные массивы структур (в структуре koshki) не используются.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д