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

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

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

Компилятор уведомляет об ошибках типа выражение слева от ".х" должно представлять класс, структуру или объединение. Покажите пожалуйста в коде как правильно использовать указатели в моем случае. И , если можно, то расскажите причину моей ошибки. Header.h
#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;
main()
#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;
            }
        }
    }
}

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

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

  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
Похожие ответы