Запись и чтение бинарного файла - C (СИ)

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

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

Доброго времени суток! Уже какой час бьюсь над проблемой и не могу никак решить ее
1. Нужно пропарсить данные из текстового файла input.txt следующего формата: Bari; Nolo acerbam sumere ; 20; 150; 5; 100; Taranto; Nolo acerbam sumere; 20; 150; 5; 101; Ancona; Nolo acerbam sumere; 20; 150; 5; 102; Roma; Nolo acerbam sumere; 20; 150; 5; 103; Milano; Nolo acerbam sumere; 20; 150; 5; 104; ..... 2. Внести их в структуру, записать в бинарный файл и вывести на экран. 3. Прочесть и отобразить полученный бинарный файл.
Проблема возникает при попытке чтения из файла. Не могу понять, где я ошибаюсь. Надеюсь на вашу помощь. Листинг программы:
#include <stdio.h>
#include <stdlib.h>
 
#define inputfName "input.txt"
#define outputfName "output.txt"
 
typedef struct
{
    char city[40]; // citta'
    char hotelName[40]; // nome di albergo
    int room1; // numero di stanze singole
    int room2; // numero di stanze doppie
    float room1Cost; // costo di una stanza singola
    float room2Cost; // costo di una stanza doppia
} Alberghi;

void parsingToStruct (FILE *alfa, FILE *beta);
void visualizza (FILE *beta);

int
main()
{
FILE *alfa, *beta;
 
parsingToStruct (alfa, beta);
visualizza (beta);
}
 
/* Модуль парсинга и создания бинарного файла */
 
void 
parsingToStruct (FILE *alfa, FILE *beta)
{
Alberghi albergo1;
int n=0;
 
alfa=fopen(inputfName,"r");
beta=fopen(outputfName, "wb");
 
if(alfa==NULL)
    printf("Errore");
 
else {
    
    rewind(alfa);
 
    while(fscanf(alfa,"%[^;]; %[^;]; %d; %f; %d; %f;\n",albergo1.city,albergo1.hotelName,&albergo1.room1, &albergo1.room1Cost,&albergo1.room2,&albergo1.room2Cost)!=EOF){
        fwrite(&albergo1, sizeof(Alberghi), n, beta);           
        printf("\n[%d] %s %s %d %.2f %d %.2f", n, albergo1.city,albergo1.hotelName,albergo1.room1, albergo1.room1Cost,albergo1.room2,albergo1.room2Cost);
        n++;
        }
                
    fclose(alfa);
    fclose(beta);
    
printf("\n\n");
system("pause");
}
}
 
/* Модуль отображения полученного файла */
 
void 
visualizza (FILE *beta)
{
Alberghi albergo1;
int stato;
int i=1;
 
beta=fopen(outputfName,"rb");
stato=fread(&albergo1,sizeof(Alberghi),1,beta);
 
    while (stato==1){ 
        printf("\n[%d] %s %s %d %.2f %d %.2f", i, albergo1.city, albergo1.hotelName, albergo1.room1, albergo1.room1Cost, albergo1.room2, albergo1.room2Cost);
                i++;
        fread(&albergo1,sizeof(albergo1),1,beta);
        stato=fread(&albergo1,sizeof(Alberghi),1,beta);
        }
        
fclose(beta);
 
printf("\n\n");
system("pause");
}

Решение задачи: «Запись и чтение бинарного файла»

textual
Листинг программы
fwrite(&albergo1, sizeof(Alberghi), n, beta);

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

  1. В данном коде используется функция fwrite, которая предназначена для записи данных в файл.
  2. В качестве аргументов функции fwrite выступают:
    • адрес переменной albergo1 (&albergo1), который содержит указатель на первый элемент массива структур типа Alberghi.
    • размер структуры Alberghi в байтах (sizeof(Alberghi)).
    • количество структур Alberghi, которые необходимо записать в файл (n).
    • имя файла, в который производится запись (beta).
  3. Функция fwrite записывает в файл beta данные из массива структур Alberghi, начиная с первой и до n-й включительно.
  4. Значение переменной n определяет количество структур Alberghi, которые необходимо записать в файл.
  5. Значение переменной beta является именем файла, в который производится запись данных.
  6. Тип данных Alberghi - это структура, которая содержит поля с информацией об отеле.
  7. Поле nome структуры Alberghi содержит название отеля.
  8. Поле città структуры Alberghi содержит название города, в котором расположен отель.
  9. Поле capienza структуры Alberghi содержит информацию о вместимости отеля.
  10. Поле stelle структуры Alberghi содержит информацию о количестве звезд, присвоенных отелю.
  11. Поле prezzo структуры Alberghi содержит информацию о стоимости проживания в отеле.
  12. Поле latitudine структуры Alberghi содержит информацию о широте местоположения отеля.
  13. Поле longitudine структуры Alberghi содержит информацию о долготе местоположения отеля.
  14. Поле indirizzo структуры Alberghi содержит информацию об адресе отеля.
  15. Поле telefono структуры Alberghi содержит информацию о телефонном номере отеля.
  16. Поле sito_web структуры Alberghi содержит информацию о веб-сайте отеля.
  17. Поле email структуры Alberghi содержит информацию об электронной почте отеля.
  18. Поле note структуры Alberghi содержит дополнительную информацию об отеле.
  19. Поле prossimo_cognome структуры Alberghi содержит информацию о фамилии следующего владельца отеля.
  20. Поле prossimo_nome структуры Alberghi содержит информацию о имени следующего владельца отеля.

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


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

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

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