Запись и чтение бинарного файла - 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);
Объяснение кода листинга программы
- В данном коде используется функция fwrite, которая предназначена для записи данных в файл.
- В качестве аргументов функции fwrite выступают:
- адрес переменной
albergo1
(&albergo1), который содержит указатель на первый элемент массива структур типа Alberghi. - размер структуры Alberghi в байтах (sizeof(Alberghi)).
- количество структур Alberghi, которые необходимо записать в файл (n).
- имя файла, в который производится запись (beta).
- адрес переменной
- Функция fwrite записывает в файл beta данные из массива структур Alberghi, начиная с первой и до n-й включительно.
- Значение переменной n определяет количество структур Alberghi, которые необходимо записать в файл.
- Значение переменной beta является именем файла, в который производится запись данных.
- Тип данных Alberghi - это структура, которая содержит поля с информацией об отеле.
- Поле
nome
структуры Alberghi содержит название отеля. - Поле
città
структуры Alberghi содержит название города, в котором расположен отель. - Поле
capienza
структуры Alberghi содержит информацию о вместимости отеля. - Поле
stelle
структуры Alberghi содержит информацию о количестве звезд, присвоенных отелю. - Поле
prezzo
структуры Alberghi содержит информацию о стоимости проживания в отеле. - Поле
latitudine
структуры Alberghi содержит информацию о широте местоположения отеля. - Поле
longitudine
структуры Alberghi содержит информацию о долготе местоположения отеля. - Поле
indirizzo
структуры Alberghi содержит информацию об адресе отеля. - Поле
telefono
структуры Alberghi содержит информацию о телефонном номере отеля. - Поле
sito_web
структуры Alberghi содержит информацию о веб-сайте отеля. - Поле
email
структуры Alberghi содержит информацию об электронной почте отеля. - Поле
note
структуры Alberghi содержит дополнительную информацию об отеле. - Поле
prossimo_cognome
структуры Alberghi содержит информацию о фамилии следующего владельца отеля. - Поле
prossimo_nome
структуры Alberghi содержит информацию о имени следующего владельца отеля.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д