Компилятор уведомляет об ошибках типа выражение слева от ".х" должно представлять класс, структуру или объединение - C (СИ)
Формулировка задачи:
Компилятор уведомляет об ошибках типа выражение слева от ".х" должно представлять класс, структуру или объединение. Покажите пожалуйста в коде как правильно использовать указатели в моем случае. И , если можно, то расскажите причину моей ошибки.
Header.h
main()
Листинг программы
- #include <stdio.h>
- #include <iostream>
- #include <string.h>
- #include <windows.h>
- #include <conio.h>
- struct infor_zoo
- {
- char name[80]; //Имя.
- bool pol; //Пол.
- char date_of_birth[20]; //Дата рождения.
- float kaloriynost; //Необходимая калорийность ежедневного рациона.
- bool content_in_winter; //Логический признак - требуется ли содержание в теплом помещении в зимнее время года.
- };
- void read_struct(struct infor_zoo **x, int *number_of_animals); // Для считывания структуры.
- int menu(); //Для показа меню.
- void my_gets(char* x); //Функция для очистки буфера.
- int search(struct infor_zoo **x, int number_of_animals);//Для поиска подходящих к условию животных.
- void bubbleSort(float* arr, int size); //Для сортировки поля float kaloriynost;
Листинг программы
- #include "header.h"
- int main()
- {
- SetConsoleOutputCP(1251);
- struct infor_zoo *animal; //Для хранения информации о животных.
- int number_of_animals=0; // Для определения количества животных.
- int result_menu = menu(); //Для хранения результата функции menu().
- bool flag = false;
- do
- {
- if (result_menu == 2) result_menu = menu();
- else flag = true;
- }while(!flag);
- do
- {
- if (result_menu == 1)
- {
- read_struct(&animal,&number_of_animals);
- system("pause");
- system("cls");
- result_menu = menu();
- }
- if (result_menu == 2)
- {
- search(&animal,number_of_animals);
- system("pause");
- system("cls");
- result_menu = menu();
- }
- }while(result_menu !=3);
- system("pause");
- return 0 ;
- }
- void read_struct(struct infor_zoo **x, int *number_of_animals)
- {
- printf("Введите количество животных : ");
- scanf("%i",number_of_animals);
- *x= (infor_zoo*) malloc (*number_of_animals * sizeof(infor_zoo));
- for (int i = 0; i < *number_of_animals;i++)
- {
- printf("Введите данные о %i животном: \n",i+1);
- printf("Введите имя: ");
- my_gets(x[i].name);
- int b;
- printf("Введите пол(1-мужской,0-женский): ");
- scanf("%i",&b);
- x[i].pol = (b == 1);
- printf("Введите дату рождения ДД.ММ.ГГ: ");
- my_gets(*x[i].date_of_birth);
- printf("Введите необходимую калорийность: ");
- scanf("%f",*x[i].kaloriynost);
- int q;
- printf("Требуется ли содержание в теплом помещении?(1-да,0-нет): ");
- scanf("%i",&q);
- *x[i].content_in_winter = (q == 1);
- }
- }
- int menu()
- {
- int q;
- do
- {
- printf("Ввод: 1.\n");
- printf("Поиск: 2.\n");
- printf("Выход: 3.\n");
- scanf("%i",&q);
- system("cls");
- if ((q == 1) || (q == 2) || (q == 3)) return q;
- }while((q!=1) && (q!=2) && (q!=3));
- }
- void my_gets(char* x)
- {
- fflush(stdin);
- gets(x);
- }
- int search(struct infor_zoo **k, int number_of_animals)
- {
- int m=0; // Для определения того,что искать.
- do
- {
- printf("1-Самое молодое животное.\n");
- printf("2-Трех животных с найменьшей необходимой калорийностью требующих переселения.\n");
- printf("Что будем искать?: ");
- scanf("%i",&m);
- system("cls");
- }while((m!=1) && ( m!=2));
- if (m == 1)
- {return 0;/*Поиск самого младшего.*/}
- else
- {
- if(number_of_animals >= 3)
- {
- int j=0;
- bool s=0;
- int b=0;
- do
- {
- printf("Введите пол(1-мужской,0-женский): ");
- scanf("%i",&b);
- s = (b == 1);
- }while((b != 1) && (b != 0));
- for (int i=0;i<number_of_animals;i++)
- {
- if (s == *k[i].pol) j++;
- }
- if (j <= number_of_animals)
- {
- float *animal_kaloriynost = (float*) malloc (j * sizeof(float));
- for (int i=1;i<=j;i++)
- {
- animal_kaloriynost[i] = *k[i].kaloriynost;
- }
- bubbleSort(animal_kaloriynost,j);
- for (int i=0;1<3;i++)
- {
- printf("Животное №%i : %f\n",i,animal_kaloriynost[i]);
- }
- system("pause");
- return 0;
- free(animal_kaloriynost);
- }
- else
- {
- system("pause");
- return 0;
- }
- }
- else
- {
- printf("Животных меньше чем требуется найти по условию!\n");
- return 0;
- }
- }
- }
- void bubbleSort(float* arr, int size)
- {
- int tmp, i, j;
- for(i = 0; i < size - 1; ++i)
- {
- for(j = 0; j < size - 1; ++j)
- {
- if (arr[j + 1] < arr[j])
- {
- tmp = arr[j + 1];
- arr[j + 1] = arr[j];
- arr[j] = tmp;
- }
- }
- }
- }
Решение задачи: «Компилятор уведомляет об ошибках типа выражение слева от ".х" должно представлять класс, структуру или объединение»
textual
Листинг программы
- #include "header.h"
- int main()
- {
- SetConsoleOutputCP(1251);
- struct infor_zoo *animal; //Для хранения информации о животных.
- int number_of_animals=0; // Для определения количества животных.
- int result_menu = menu(); //Для хранения результата функции menu().
- bool flag = false;
- do
- {
- if (result_menu == 2) result_menu = menu();
- else flag = true;
- }while(!flag);
- do
- {
- if (result_menu == 1)
- {
- read_struct(&animal,&number_of_animals);
- system("pause");
- system("cls");
- result_menu = menu();
- }
- if (result_menu == 2)
- {
- search(&animal,number_of_animals);
- system("pause");
- system("cls");
- result_menu = menu();
- }
- }while(result_menu !=3);
- system("pause");
- return 0 ;
- }
- void read_struct(struct infor_zoo **x, int *number_of_animals)
- {
- printf("Введите количество животных : ");
- scanf("%i",number_of_animals);
- *x= (infor_zoo*) malloc (*number_of_animals * sizeof(infor_zoo));
- for (int i = 0; i < *number_of_animals;i++)
- {
- printf("Введите данные о %i животном: \n",i+1);
- printf("Введите имя: ");
- my_gets((*x[i]).name);
- int b;
- printf("Введите пол(1-мужской,0-женский): ");
- scanf("%i",&b);
- (*x[i]).pol = (b == 1);
- printf("Введите дату рождения ДД.ММ.ГГ: ");
- my_gets((*x[i]).date_of_birth);
- printf("Введите необходимую калорийность: ");
- scanf("%f",(*x[i]).kaloriynost);
- int q;
- printf("Требуется ли содержание в теплом помещении?(1-да,0-нет): ");
- scanf("%i",&q);
- (*x[i]).content_in_winter = (q == 1);
- }
- }
- int menu()
- {
- int q;
- do
- {
- printf("Ввод: 1.\n");
- printf("Поиск: 2.\n");
- printf("Выход: 3.\n");
- scanf("%i",&q);
- system("cls");
- if ((q == 1) || (q == 2) || (q == 3)) return q;
- }while((q!=1) && (q!=2) && (q!=3));
- }
- void my_gets(char* x)
- {
- fflush(stdin);
- gets(x);
- }
- int search(struct infor_zoo **k, int number_of_animals)
- {
- int m=0; // Для определения того,что искать.
- do
- {
- printf("1-Самое молодое животное.\n");
- printf("2-Трех животных с найменьшей необходимой калорийностью требующих переселения.\n");
- printf("Что будем искать?: ");
- scanf("%i",&m);
- system("cls");
- }while((m!=1) && ( m!=2));
- if (m == 1)
- {return 0;/*Поиск самого младшего.*/}
- else
- {
- if(number_of_animals >= 3)
- {
- int j=0;
- bool s=0;
- int b=0;
- do
- {
- printf("Введите пол(1-мужской,0-женский): ");
- scanf("%i",&b);
- s = (b == 1);
- }while((b != 1) && (b != 0));
- for (int i=0;i<number_of_animals;i++)
- {
- if (s == (*k[i]).pol) j++;
- }
- if (j <= number_of_animals)
- {
- float *animal_kaloriynost = (float*) malloc (j * sizeof(float));
- for (int i=1;i<=j;i++)
- {
- animal_kaloriynost[i] = (*k[i]).kaloriynost;
- }
- bubbleSort(animal_kaloriynost,j);
- for (int i=0;1<3;i++)
- {
- printf("Животное №%i : %f\n",i,animal_kaloriynost[i]);
- }
- system("pause");
- return 0;
- free(animal_kaloriynost);
- }
- else
- {
- system("pause");
- return 0;
- }
- }
- else
- {
- printf("Животных меньше чем требуется найти по условию!\n");
- return 0;
- }
- }
- }
- void bubbleSort(float* arr, int size)
- {
- int tmp, i, j;
- for(i = 0; i < size - 1; ++i)
- {
- for(j = 0; j < size - 1; ++j)
- {
- if (arr[j + 1] < arr[j])
- {
- tmp = arr[j + 1];
- arr[j + 1] = arr[j];
- arr[j] = tmp;
- }
- }
- }
- }
Объяснение кода листинга программы
В данном коде выполняется ввод данных о животных и последующий поиск определенных животных в структуре данных.
- Структура
infor_zoo
содержит поля:name
- имя животного (тип данных - строка)pol
- пол животного (тип данных - логическое значение)date_of_birth
- дата рождения животного (тип данных - строка)kaloriynost
- необходимая калорийность для животного (тип данных - число с плавающей точкой)content_in_winter
- требуется ли содержание животного в теплом помещении (тип данных - логическое значение)
- В функции
read_struct
происходит чтение данных о животных из стандартного ввода. После ввода количества животных, для каждого животного запрашиваются и сохраняются данные, указанные выше. - В функции
menu
пользователю предлагается выбрать действие из списка:- 1 - Ввод данных о животных
- 2 - Поиск определенных животных
- 3 - Выход из программы
- В функции
my_gets
выполняется очистка буфера ввода, чтобы избежать утечек памяти. - В функции
search
пользователю предлагается выбрать тип поиска:- 1 - Поиск самого молодого животного
- 2 - Поиск трех животных с наименьшей необходимой калорийностью, требующих переселения
- Если выбрано первое действие, то происходит поиск самого молодого животного в структуре данных.
- Если выбрано второе действие, то происходит поиск трех животных с наименьшей необходимой калорийностью, требующих переселения. Для этого сначала определяется пол животных, затем сортируются по необходимому количеству калорий и выводятся на экран.
- В функции
bubbleSort
выполняется сортировка массива по возрастанию. - В функции
main
происходит инициализация переменных и основного цикла программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д