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.000000

    Filiale: Thekla
    Umsatz : 10800.000000
    Bestand: 196.399994
    Beschäftigte: 43.000000
    Löhne : 66650.000000
    Fläche: 559
    AV : 785.000000

    Filiale: Riemann
    Umsatz : 8845.000000
    Bestand: 160.000000
    Beschäftigte: 37.000000
    Löhne : 57350.000000
    Fläche: 181
    AV : 500.000000

    Filiale: Taro
    Umsatz : 23454.000000
    Bestand: 426.399994
    Beschäftigte: 87.000000
    Löhne : 134850.000000
    Fläche: 804
    AV : 935.000000

    Filiale: Breitenfelder
    Umsatz : 13071.000000
    Bestand: 237.600006
    Beschäftigte: 49.000000
    Löhne : 75950.000000
    Fläche: 490
    AV : 720.000000

    Filiale: Renoir
    Umsatz : 8722.000000
    Bestand: 158.600006
    Beschäftigte: 36.000000
    Löhne : 55800.000000
    Fläche: 325
    AV : 640.000000

    Filiale: B„stlein
    Umsatz : 25053.000000
    Bestand: 455.500000
    Beschäftigte: 93.000000
    Löhne : 144150.000000
    Fläche: 1063
    AV : 1200.000000

    Filiale: L”bauer
    Umsatz : 12713.000000
    Bestand: 231.199997
    Beschäftigte: 45.000000
    Löhne : 69750.000000
    Fläche: 430
    AV : 690.000000

    Filiale: Stollberger
    Umsatz : 13427.000000
    Bestand: 244.100006
    Beschäftigte: 51.000000
    Löhne : 79050.000000
    Fläche: 766
    AV : 845.000000

    Filiale: 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


Anmelden zum Antworten