Mam problem podczas zapisu struktury do pliku binarnego, funkcja main wygląda tak:
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
#include <stdlib.h>
#define DLTAB 20
char wybierz(void);
void pokaz_puste(char wybor);
void pokaz_liste(void);
void anulacja(void);
void rezerwacja(void);
void czysc(void);
struct {
int id;
int wolne; /*1 - wolne, 0 - zajete*/
char imie[DLTAB];
char nazwisko[DLTAB];
} samolot[12];
int main(void) {
int licznik = 0;
char wybor;
FILE *rezerwacje;
size_t rozmiar = sizeof(samolot[0]);
int pobrano;
int znacznik;
if((rezerwacje = fopen("rezerwacje.bin", "rb")) == NULL) {
puts("Nie mozna bylo otworzyc pliku!!!");
exit(1);
}
rewind(rezerwacje);
fread(&znacznik, sizeof(int), 1, rezerwacje);
while(fread(&samolot[licznik], rozmiar, 1, rezerwacje) == 1) ++pobrano;
fclose(rezerwacje);
if(znacznik == 0) {
for(licznik = 0; licznik < 12; licznik++) {
samolot[licznik].wolne = 1;
}
}
for(licznik = 0; licznik < 12; licznik++) {
samolot[licznik].id = licznik + 1;
}
for(licznik = pobrano; licznik < 12; licznik++) {
samolot[licznik].wolne = 1;
}
while(1) {
wybor = wybierz();
switch(wybor) {
case 'a' :
pokaz_puste('A');
break;
case 'b' :
pokaz_puste('B');
break;
case 'c' :
pokaz_liste();
break;
case 'd' :
rezerwacja();
break;
case 'e' :
anulacja();
break;
case 'f' :
return 0;
break;
default :
puts("Nie znana odpowiedz!!!");
break;
}
}
if((rezerwacje = fopen("rezerwacje.txt", "wb")) == NULL) {
printf("Nie mozna bylo zapisac!!!");
exit(1);
}
znacznik = 1;
fwrite(&znacznik, sizeof(int), 1, rezerwacje);
for(licznik = 0; licznik < 12; licznik++) {
fwrite(&samolot[licznik], rozmiar, 1, rezerwacje);
}
fclose(rezerwacje);
return 0;
}
Nie zamieszczam reszty kodu, bo jest dość długi.
Program ma odczytać dane o zajętych miejscach, a status reszty ustawić na wolne. Znacznik oznacza, czy plik był edytowany(tworzony przez inny program). Odczytane dane są zapisywane do tablicy struktur i po edycji są zapisywane do tego samego pliku. I tu pojawia się problem, program poprawnie edytuje dane, ale po zapisie plik pozostaje bez zmian.