Выдается ошибка 'fcloseall' undeclared - C (СИ)

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

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

Для проработки лаб со мной знакомый , после того как попросила помочь,так сказать "поделился" кодом.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct sym //структуры или записи
{
        unsigned char ch;
        float freq; 
        char code[255];
        sym *left;
        sym *right;
};
 
union code
{
    unsigned char chhh;//переменная содержащая код для записи в сжатый файл
 
    struct byte
    {
        unsigned b1:1;
        unsigned b2:1;
        unsigned b3:1;
        unsigned b4:1;
        unsigned b5:1;
        unsigned b6:1;
        unsigned b7:1;
        unsigned b8:1;      
    }byte;
};
 
sym *makeTree(sym *psym[],int k)//рeкурсивная функция создания дерева Хофмана
{
    sym *temp;
    temp=(sym*)malloc(sizeof(sym));
    temp->freq=psym[k-1]->freq+psym[k-2]->freq;
    temp->code[0]=0;
    temp->left=psym[k-1];
    temp->right=psym[k-2];
 
    if(k==2)
        return temp;
    else //внесение в массив в нужное место элемента дерева Хофмана
    {
        for(int i=0;i<k;i++)
            if (temp->freq>psym[i]->freq)
            {   
                for(int j=k-1;j>i;j--)
                    psym[j]=psym[j-1];                                  
                
                psym[i]=temp;
                break;
            }       
    }
return makeTree(psym,k-1);
}
 
void makeCodes(sym *root)//Рекурсивная функция кодирования
{
    if(root->left)
    {
        strcpy(root->left->code,root->code);
        strcat(root->left->code,"0");
        makeCodes(root->left);
    }
    if(root->right)
    {
        strcpy(root->right->code,root->code);
        strcat(root->right->code,"1");
        makeCodes(root->right);
    }
}

int main ()
{
    FILE *fp,*fp2,*fp3; //указатели на файлы
    //fp=fopen("777.txt","rb"); //открываем конкретный файл для сжатия
    fp=fopen("123.txt","rb"); //открываем конкретный файл
    fp2=fopen("teemp.txt","wb");//открываем файл для записи бинарного кода
    fp3=fopen("7777.txt","wb");//открываем файл для записи сжатого файла
 
    int chh;  // в эту переменную читается информация из файла
    int k=0; //счётчик количества различных букв, уникальных символов
    int kk=0; // счётчик количества всех знаков в файле
    int fsize2=0;//счётчик количества символов из 0 и 1 в промежуточном файле teemp
    int ts;//размер хвоста файла (то, что не кратно 8 в промежуточном файле)
    int kolvo[256]={0};//инициализируем массив количества уникальных символов
    sym simbols[256]={0}; //инициализируем массив записей 
    sym *psym[256]; //инициализируем массив указателей на записи
    float summir=0;//сумма частот встреч
    int mes[8];//массив 0 и 1
    char j=0;//вспомогательная переменная
    
    //Обработка ошибок чтения файла
    if(fp==NULL)
    {
        puts("FILE NOT OPEN!!!!!!!");
        return 0;
    }
 
    sym *symbols=(sym*)malloc(k*sizeof(sym));//создание динамического массива структур simbols
    sym **psum=(sym**)malloc(k*sizeof(sym*));//создание динамического массива указателей на simbols
    
    //Начинаем побайтно читать файл и составлять таблицу встречаемости
    while((chh=fgetc(fp))!=EOF)
    {       
        for(int j=0; j<256; j++)
        {
            if (chh==simbols[j].ch)
            {
                kolvo[j]++;
                kk++;               
                break;
            }
            if (simbols[j].ch==0)
            {
                simbols[j].ch=(unsigned char)chh;
                kolvo[j]=1;
                k++; kk++;
                break;
            }           
        }       
    }
 
    // Рассчёт частоты встречаемости
    for(int i=0;i<k;i++)
        simbols[i].freq=(float)kolvo[i]/kk;
    
    for(int i=0;i<k;i++) //в массив указателей заносим адреса записей
        psym[i]=&simbols[i];
    
//Сортировка по убыванию 
    sym tempp;
    for(int i=1;i<k;i++)
        for(int j=0;j<k-1;j++)
            if(simbols[j].freq<simbols[j+1].freq)
            {
                tempp=simbols[j];
                simbols[j]=simbols[j+1];
                simbols[j+1]=tempp;
            }
 
for(int i=0;i<k;i++)
{
    summir+=simbols[i].freq;    
    printf("Ch= %d\tFreq= %f\tPPP= %c\t\n",simbols[i].ch,simbols[i].freq,psym[i]->ch,i);
}
    printf("\n Slova = %d\tSummir=%f\n",kk,summir);
    
    sym *root=makeTree(psym,k);//вызов функции создания дерева Хофмана
    
    makeCodes(root);//вызов функции получения кода
 
    rewind(fp);//возвращаем указатель в файле в начало файла
//в цикле читаем исходный файл, и записываем полученные в функциях коды в промежуточный файл
while((chh=fgetc(fp))!=EOF)
{
    for(int i=0;i<k;i++)
        if(chh==simbols[i].ch)
            fputs(simbols[i].code,fp2);
}
fclose(fp2);
 
//Заново открываем файл с бинарным кодом, но теперь для чтения
int i=0;
fp2=fopen("teemp.txt","rb");
//Считаем размер бинарного файла(количество символов в нём)
while((chh=fgetc(fp2))!=EOF)
        fsize2++;
 
ts=fsize2%8;//находим остаток, количество символов не кратных 8 (хвост)
 
//формируем заголовок сжатого файла через поля байтов
fwrite("compresing!!!",sizeof(char),24,fp3);//условная подпись
fwrite(&k,sizeof(int),1,fp3);//количество уникальных символов
fwrite(&ts,sizeof(int),1,fp3);//величина хвоста
//Записываем в сжатый файл таблицу встречаемости
for(i=0;i<k;i++)
{
    fwrite(&simbols[i].ch,sizeof(sym),1,fp3);
    fwrite(&simbols[i].freq,sizeof(sym),1,fp3);
}
 
rewind(fp2);//возвращаем указатель в промежуточном файле в начало файла
 
union code code1;//инициализируем переменную code1
//Читаем бинарный файл, занося последовательно каждые 8 элементов в массив для последующей побитовой обработки в объединении union
j=0;
for(int i=0;i<fsize2-ts;i++)
{
    mes[j]=fgetc(fp2);
    if(j==7)
    {       
        code1.byte.b1=mes[0]-'0';
        code1.byte.b2=mes[1]-'0';
        code1.byte.b3=mes[2]-'0';
        code1.byte.b4=mes[3]-'0';
        code1.byte.b5=mes[4]-'0';
        code1.byte.b6=mes[5]-'0';
        code1.byte.b7=mes[6]-'0';
        code1.byte.b8=mes[7]-'0';
        fputc(code1.chhh,fp3);
        j=0;
    }
    j++;    
}
//Записываем хвост
j=0;
for(int i=0;i<=ts;i++)
{
    mes[j]=fgetc(fp2);
    if(j==ts)
    {       
        code1.byte.b1=mes[0]-'0';
        code1.byte.b2=mes[1]-'0';
        code1.byte.b3=mes[2]-'0';
        code1.byte.b4=mes[3]-'0';
        code1.byte.b5=mes[4]-'0';
        code1.byte.b6=mes[5]-'0';
        code1.byte.b7=mes[6]-'0';
        code1.byte.b8=mes[7]-'0';
        fputc(code1.chhh,fp3);      
    }
    j++;    
}   
 
fcloseall();//закрываем все открытые файлы
 
return 0;
}
А у меня он чего-то не хочет запускаться, выдает одну единственную ошибку In function `int main()': `fcloseall' undeclared (first use this function) (Each undeclared identifier is reported only once for each function it appears in.) Это какой-то библиотеки не хватает в коде или что раз `fcloseall' необьявленый????? Работаю в Dev-c++

Решение задачи: «Выдается ошибка 'fcloseall' undeclared»

textual
Листинг программы
#define _GNU_SOURCE

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

  1. Подключается заголовочный файл fcntl.h для использования системных вызовов.
  2. Включается заголовочный файл unistd.h для использования стандартных функций языка C.
  3. Включается заголовочный файл stdio.h для использования функций ввода-вывода.
  4. Включается заголовочный файл stdlib.h для использования функций работы с памятью.
  5. Включается заголовочный файл string.h для использования функций работы со строками.
  6. Определяется макрос _GNU_SOURCE для использования расширенных функций GNU.
  7. Создается функция main с типом возвращаемого значения int.
  8. Внутри функции main объявляются переменные:
    • fd как целочисленный файловый дескриптор.
    • buffer как указатель на буфер для чтения.
    • path_name как строка, содержащая путь к файлу.
  9. Устанавливается начальное значение регистрации библиотеки стандартного ввода/вывода.
  10. Открывается файл с помощью функции fdopen с указанием пути к файлу и режима чтения.
  11. Проверяется успешность открытия файла с помощью условного оператора if.
  12. Если файл успешно открыт, то в цикле с помощью функции fscanf считываются значения из файла и сохраняются в переменные:
    • num как целочисленное значение.
    • str как строковое значение.
  13. После завершения цикла выводится сообщение об успешном выполнении программы.
  14. Если файл не удалось открыть, то выводится сообщение об ошибке и возвращается значение 1.
  15. В конце функции main возвращается значение 0, указывающее на успешное выполнение программы.
  16. Завершается определение функции main.
  17. В конце файла подключается библиотека stdlib.h для использования функций работы с памятью.
  18. В конце файла подключается библиотека stdio.h для использования функций ввода-вывода.
  19. В конце файла подключается библиотека fcntl.h для использования системных вызовов.
  20. В конце файла завершается программа.

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


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

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

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