Компилятор уведомляет об ошибках типа выражение слева от ".х" должно представлять класс, структуру или объединение - C (СИ)

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

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

Компилятор уведомляет об ошибках типа выражение слева от ".х" должно представлять класс, структуру или объединение. Покажите пожалуйста в коде как правильно использовать указатели в моем случае. И , если можно, то расскажите причину моей ошибки. Header.h
Листинг программы
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <string.h>
  4. #include <windows.h>
  5. #include <conio.h>
  6. struct infor_zoo
  7. {
  8. char name[80]; //Имя.
  9. bool pol; //Пол.
  10. char date_of_birth[20]; //Дата рождения.
  11. float kaloriynost; //Необходимая калорийность ежедневного рациона.
  12. bool content_in_winter; //Логический признак - требуется ли содержание в теплом помещении в зимнее время года.
  13. };
  14. void read_struct(struct infor_zoo **x, int *number_of_animals); // Для считывания структуры.
  15. int menu(); //Для показа меню.
  16. void my_gets(char* x); //Функция для очистки буфера.
  17. int search(struct infor_zoo **x, int number_of_animals);//Для поиска подходящих к условию животных.
  18. void bubbleSort(float* arr, int size); //Для сортировки поля float kaloriynost;
main()
Листинг программы
  1. #include "header.h"
  2. int main()
  3. {
  4. SetConsoleOutputCP(1251);
  5. struct infor_zoo *animal; //Для хранения информации о животных.
  6. int number_of_animals=0; // Для определения количества животных.
  7. int result_menu = menu(); //Для хранения результата функции menu().
  8. bool flag = false;
  9. do
  10. {
  11. if (result_menu == 2) result_menu = menu();
  12. else flag = true;
  13. }while(!flag);
  14. do
  15. {
  16. if (result_menu == 1)
  17. {
  18. read_struct(&animal,&number_of_animals);
  19. system("pause");
  20. system("cls");
  21. result_menu = menu();
  22. }
  23. if (result_menu == 2)
  24. {
  25. search(&animal,number_of_animals);
  26. system("pause");
  27. system("cls");
  28. result_menu = menu();
  29. }
  30. }while(result_menu !=3);
  31. system("pause");
  32. return 0 ;
  33. }
  34. void read_struct(struct infor_zoo **x, int *number_of_animals)
  35. {
  36. printf("Введите количество животных : ");
  37. scanf("%i",number_of_animals);
  38. *x= (infor_zoo*) malloc (*number_of_animals * sizeof(infor_zoo));
  39. for (int i = 0; i < *number_of_animals;i++)
  40. {
  41. printf("Введите данные о %i животном: \n",i+1);
  42. printf("Введите имя: ");
  43. my_gets(x[i].name);
  44. int b;
  45. printf("Введите пол(1-мужской,0-женский): ");
  46. scanf("%i",&b);
  47. x[i].pol = (b == 1);
  48. printf("Введите дату рождения ДД.ММ.ГГ: ");
  49. my_gets(*x[i].date_of_birth);
  50. printf("Введите необходимую калорийность: ");
  51. scanf("%f",*x[i].kaloriynost);
  52. int q;
  53. printf("Требуется ли содержание в теплом помещении?(1-да,0-нет): ");
  54. scanf("%i",&q);
  55. *x[i].content_in_winter = (q == 1);
  56. }
  57. }
  58. int menu()
  59. {
  60. int q;
  61. do
  62. {
  63. printf("Ввод: 1.\n");
  64. printf("Поиск: 2.\n");
  65. printf("Выход: 3.\n");
  66. scanf("%i",&q);
  67. system("cls");
  68. if ((q == 1) || (q == 2) || (q == 3)) return q;
  69. }while((q!=1) && (q!=2) && (q!=3));
  70. }
  71. void my_gets(char* x)
  72. {
  73. fflush(stdin);
  74. gets(x);
  75. }
  76. int search(struct infor_zoo **k, int number_of_animals)
  77. {
  78. int m=0; // Для определения того,что искать.
  79. do
  80. {
  81. printf("1-Самое молодое животное.\n");
  82. printf("2-Трех животных с найменьшей необходимой калорийностью требующих переселения.\n");
  83. printf("Что будем искать?: ");
  84. scanf("%i",&m);
  85. system("cls");
  86. }while((m!=1) && ( m!=2));
  87. if (m == 1)
  88. {return 0;/*Поиск самого младшего.*/}
  89. else
  90. {
  91. if(number_of_animals >= 3)
  92. {
  93. int j=0;
  94. bool s=0;
  95. int b=0;
  96. do
  97. {
  98. printf("Введите пол(1-мужской,0-женский): ");
  99. scanf("%i",&b);
  100. s = (b == 1);
  101. }while((b != 1) && (b != 0));
  102. for (int i=0;i<number_of_animals;i++)
  103. {
  104. if (s == *k[i].pol) j++;
  105. }
  106. if (j <= number_of_animals)
  107. {
  108. float *animal_kaloriynost = (float*) malloc (j * sizeof(float));
  109. for (int i=1;i<=j;i++)
  110. {
  111. animal_kaloriynost[i] = *k[i].kaloriynost;
  112. }
  113. bubbleSort(animal_kaloriynost,j);
  114. for (int i=0;1<3;i++)
  115. {
  116. printf("Животное №%i : %f\n",i,animal_kaloriynost[i]);
  117. }
  118. system("pause");
  119. return 0;
  120. free(animal_kaloriynost);
  121. }
  122. else
  123. {
  124. system("pause");
  125. return 0;
  126. }
  127. }
  128. else
  129. {
  130. printf("Животных меньше чем требуется найти по условию!\n");
  131. return 0;
  132. }
  133. }
  134. }
  135. void bubbleSort(float* arr, int size)
  136. {
  137. int tmp, i, j;
  138. for(i = 0; i < size - 1; ++i)
  139. {
  140. for(j = 0; j < size - 1; ++j)
  141. {
  142. if (arr[j + 1] < arr[j])
  143. {
  144. tmp = arr[j + 1];
  145. arr[j + 1] = arr[j];
  146. arr[j] = tmp;
  147. }
  148. }
  149. }
  150. }

Решение задачи: «Компилятор уведомляет об ошибках типа выражение слева от ".х" должно представлять класс, структуру или объединение»

textual
Листинг программы
  1. #include "header.h"
  2.  
  3. int main()
  4. {
  5.     SetConsoleOutputCP(1251);
  6.  
  7.     struct infor_zoo *animal; //Для хранения информации о животных.
  8.     int number_of_animals=0; // Для определения количества животных.
  9.     int result_menu = menu(); //Для хранения результата функции menu().
  10.     bool flag = false;
  11.  
  12.     do
  13.     {
  14.         if (result_menu == 2) result_menu = menu();
  15.         else flag = true;
  16.     }while(!flag);
  17.     do
  18.     {
  19.         if (result_menu == 1)
  20.         {
  21.             read_struct(&animal,&number_of_animals);
  22.             system("pause");
  23.             system("cls");
  24.             result_menu = menu();
  25.         }
  26.         if (result_menu == 2)
  27.         {
  28.             search(&animal,number_of_animals);
  29.             system("pause");
  30.             system("cls");
  31.             result_menu = menu();
  32.         }
  33.     }while(result_menu !=3);
  34.     system("pause");
  35.     return 0 ;
  36. }
  37.  
  38. void read_struct(struct infor_zoo **x, int *number_of_animals)
  39. {
  40.     printf("Введите количество животных : ");
  41.     scanf("%i",number_of_animals);
  42.     *x= (infor_zoo*) malloc (*number_of_animals * sizeof(infor_zoo));
  43.  
  44.     for (int i = 0; i < *number_of_animals;i++)
  45.     {
  46.         printf("Введите данные о %i животном: \n",i+1);
  47.  
  48.         printf("Введите имя: ");
  49.         my_gets((*x[i]).name);
  50.  
  51.         int b;
  52.         printf("Введите пол(1-мужской,0-женский): ");
  53.         scanf("%i",&b);
  54.         (*x[i]).pol = (b == 1);
  55.  
  56.         printf("Введите дату рождения ДД.ММ.ГГ: ");
  57.         my_gets((*x[i]).date_of_birth);
  58.  
  59.         printf("Введите необходимую калорийность: ");
  60.         scanf("%f",(*x[i]).kaloriynost);
  61.  
  62.         int q;
  63.         printf("Требуется ли содержание в теплом помещении?(1-да,0-нет): ");
  64.         scanf("%i",&q);
  65.         (*x[i]).content_in_winter = (q == 1);
  66.     }
  67. }
  68. int menu()
  69. {
  70.     int q;
  71.     do
  72.     {
  73.         printf("Ввод: 1.\n");
  74.         printf("Поиск: 2.\n");
  75.         printf("Выход: 3.\n");
  76.         scanf("%i",&q);
  77.  
  78.         system("cls");
  79.         if ((q == 1) || (q == 2) || (q == 3)) return q;
  80.     }while((q!=1) && (q!=2) && (q!=3));
  81. }
  82.  
  83. void my_gets(char* x)
  84. {
  85.     fflush(stdin);
  86.     gets(x);
  87. }
  88. int search(struct infor_zoo **k, int number_of_animals)
  89. {
  90.     int m=0; // Для определения того,что искать.
  91.     do
  92.     {
  93.         printf("1-Самое молодое животное.\n");
  94.         printf("2-Трех животных с найменьшей необходимой калорийностью требующих переселения.\n");
  95.         printf("Что будем искать?: ");
  96.         scanf("%i",&m);
  97.         system("cls");
  98.     }while((m!=1) && ( m!=2));
  99.  
  100.     if (m == 1)
  101.     {return 0;/*Поиск самого младшего.*/}
  102.     else
  103.     {
  104.         if(number_of_animals >= 3)
  105.         {
  106.             int j=0;
  107.             bool s=0;
  108.             int b=0;
  109.             do
  110.             {
  111.                 printf("Введите пол(1-мужской,0-женский): ");
  112.                 scanf("%i",&b);
  113.                 s = (b == 1);
  114.             }while((b != 1) && (b != 0));
  115.             for (int i=0;i<number_of_animals;i++)
  116.             {
  117.                 if (s == (*k[i]).pol) j++;    
  118.             }
  119.             if (j <= number_of_animals)
  120.             {
  121.                 float *animal_kaloriynost = (float*) malloc (j * sizeof(float));
  122.                 for (int i=1;i<=j;i++)
  123.                 {
  124.                     animal_kaloriynost[i] = (*k[i]).kaloriynost;
  125.                 }
  126.             bubbleSort(animal_kaloriynost,j);
  127.             for (int i=0;1<3;i++)
  128.             {
  129.                 printf("Животное №%i : %f\n",i,animal_kaloriynost[i]);
  130.             }
  131.             system("pause");
  132.             return 0;
  133.             free(animal_kaloriynost);
  134.             }
  135.             else
  136.             {
  137.                 system("pause");
  138.                 return 0;
  139.             }
  140.         }
  141.         else
  142.         {
  143.             printf("Животных меньше чем требуется найти по условию!\n");
  144.             return 0;
  145.         }
  146.     }
  147. }
  148. void bubbleSort(float* arr, int size)
  149. {
  150.     int tmp, i, j;
  151.  
  152.     for(i = 0; i < size - 1; ++i)
  153.     {            
  154.         for(j = 0; j < size - 1; ++j)
  155.         {    
  156.             if (arr[j + 1] < arr[j])
  157.             {
  158.                 tmp = arr[j + 1];
  159.                 arr[j + 1] = arr[j];
  160.                 arr[j] = tmp;
  161.             }
  162.         }
  163.     }
  164. }

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

В данном коде выполняется ввод данных о животных и последующий поиск определенных животных в структуре данных.

  1. Структура infor_zoo содержит поля:
    • name - имя животного (тип данных - строка)
    • pol - пол животного (тип данных - логическое значение)
    • date_of_birth - дата рождения животного (тип данных - строка)
    • kaloriynost - необходимая калорийность для животного (тип данных - число с плавающей точкой)
    • content_in_winter - требуется ли содержание животного в теплом помещении (тип данных - логическое значение)
  2. В функции read_struct происходит чтение данных о животных из стандартного ввода. После ввода количества животных, для каждого животного запрашиваются и сохраняются данные, указанные выше.
  3. В функции menu пользователю предлагается выбрать действие из списка:
    • 1 - Ввод данных о животных
    • 2 - Поиск определенных животных
    • 3 - Выход из программы
  4. В функции my_gets выполняется очистка буфера ввода, чтобы избежать утечек памяти.
  5. В функции search пользователю предлагается выбрать тип поиска:
    • 1 - Поиск самого молодого животного
    • 2 - Поиск трех животных с наименьшей необходимой калорийностью, требующих переселения
  6. Если выбрано первое действие, то происходит поиск самого молодого животного в структуре данных.
  7. Если выбрано второе действие, то происходит поиск трех животных с наименьшей необходимой калорийностью, требующих переселения. Для этого сначала определяется пол животных, затем сортируются по необходимому количеству калорий и выводятся на экран.
  8. В функции bubbleSort выполняется сортировка массива по возрастанию.
  9. В функции main происходит инициализация переменных и основного цикла программы.

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


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

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

9   голосов , оценка 3.889 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы