binärdatei in struktur einlesen
-
brauche hilfe,
das auslesen der datei oder ausgabe geht nich#include <conio.h> #include <stdio.h> #define DATEI "Handel.dat" #define DATENSAEZE 10 struct filialen { char filiale[21]; float umsatz; float bestand; float beschaeftigte; float loehne; unsigned short quadratmeter; float anlagevermoegen; }__attribute__((packed)); int main (void) { int i = 0; FILE *fin; struct filialen *daten = malloc(sizeof(daten) * DATENSAEZE); if ((fin = fopen(DATEI, "rb")) == NULL ) { printf("Datei '%s' konnte nicht geoeffnet werden.\n", DATEI); } else fread(daten, sizeof(daten), DATENSAEZE, fin); fclose(fin); for (i;i<DATENSAEZE;i++) { printf("%s\n",daten[i].filiale); printf("%f\n",daten[i].umsatz); printf("%f\n",daten[i].bestand); printf("%f\n",daten[i].beschaeftigte); printf("%f\n",daten[i].loehne); printf("%i\n",daten[i].quadratmeter); printf("%f\n",daten[i].anlagevermoegen); printf("\n"); } system("PAUSE"); return 0; }
die dat-datei ist hier.
-
"geht nicht" ist natuerlich eine /sehr/ praezise Fehlerbeschreibung...
-
bei i=0 wird .anlagevermoegen nicht ausgegeben und bei i>0 kommt nur datensalat
rauskommen müste:
Filiale: Wintergarten
Umsatz : 30510.000000
Bestand: 554.700012
Beschäftigte: 100.000000
Löhne : 155000.000000
Fläche: 960
AV : 1105.000000Filiale: Thekla
Umsatz : 10800.000000
Bestand: 196.399994
Beschäftigte: 43.000000
Löhne : 66650.000000
Fläche: 559
AV : 785.000000Filiale: Riemann
Umsatz : 8845.000000
Bestand: 160.000000
Beschäftigte: 37.000000
Löhne : 57350.000000
Fläche: 181
AV : 500.000000Filiale: Taro
Umsatz : 23454.000000
Bestand: 426.399994
Beschäftigte: 87.000000
Löhne : 134850.000000
Fläche: 804
AV : 935.000000Filiale: Breitenfelder
Umsatz : 13071.000000
Bestand: 237.600006
Beschäftigte: 49.000000
Löhne : 75950.000000
Fläche: 490
AV : 720.000000Filiale: Renoir
Umsatz : 8722.000000
Bestand: 158.600006
Beschäftigte: 36.000000
Löhne : 55800.000000
Fläche: 325
AV : 640.000000Filiale: B„stlein
Umsatz : 25053.000000
Bestand: 455.500000
Beschäftigte: 93.000000
Löhne : 144150.000000
Fläche: 1063
AV : 1200.000000Filiale: L”bauer
Umsatz : 12713.000000
Bestand: 231.199997
Beschäftigte: 45.000000
Löhne : 69750.000000
Fläche: 430
AV : 690.000000Filiale: Stollberger
Umsatz : 13427.000000
Bestand: 244.100006
Beschäftigte: 51.000000
Löhne : 79050.000000
Fläche: 766
AV : 845.000000Filiale: Tauchaer
Umsatz : 18832.000000
Bestand: 342.399994
Beschäftigte: 79.000000
Löhne : 122450.000000
Fläche: 766
AV : 860.000000
-
Und beim 1. gibt er auch die Werte vor dem Anlagevermögen richtig aus? Was ist eigentlich dieses __attribute__((packed)) ??
Aja gib mal bei deinem malloc() nicht sizeof(daten) an sondern sizeof(struct filialen). Bei sizeof(daten) wird nämlich nur die Größe für einen Zeiger reserviert! Das können je nach System 2 oder 4 Byte sein. Das wird wahrscheinlich auch der Fehler sein.
-
Und beim 1. gibt er auch die Werte vor dem Anlagevermögen richtig aus?
nein
Was ist eigentlich dieses __attribute__((packed)) ??
ka, hat unser prof so gesaget un wenn ich's weglasse siehts noch schlimmer aus
Aja gib mal bei deinem malloc() nicht sizeof(daten) an sondern sizeof(struct filialen). Bei sizeof(daten) wird nämlich nur die Größe für einen Zeiger reserviert! Das können je nach System 2 oder 4 Byte sein. Das wird wahrscheinlich auch der Fehler sein.
habs geändert, aber bleibt alles beim alten
-
Bitte auch beim fread() das sizeof(daten) in sizeof(struct filialen) umändern.
-
jo genau das wars noch
dank dir