Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Struktur in C Biteverschiebung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.01.2016, 14:48 Uhr
MasterZyper



Und zwar habe ich folgendes Problem. Ich möchte aus einer datei die unser lehrer uns vorgegeben hat und einer struktur von ihm werte zunächst ertmal ausgeben lassen. doch dabei stoße ich auf einen seltsamen fehler. Und zwar gibt er immer einen anfangsbuchstaben weniger aus als wie am Anfang der stadtname hatte. Ich vermute irgendwas bei der bytekodierung verschiebt sich ich blicke aber nach 3h immernoch nicht da durch. vlt könnt ihr mir ja helfen.


C++:
#include <stdio.h>
#include <conio.h>

struct __attribute__((packed)) Satz {
    char ort[11];
    float temp[30];
    short niederschalg[30];
    short luftdruck[30];
    float luftfeuchte[30];
}adr;

int main()  {
    FILE *Dateiptr;
    int i=1;
    char *ausdatei= "Wetter.dat";

    if (!(Dateiptr = fopen(ausdatei,"rb")))
    {
        printf("Fehler beim Oeffnen der Datei %s!\n", ausdatei);
        getch();
        return(-1);
    }
    else
        while (fread(&adr, sizeof(adr),1, Dateiptr) == 1)
        {
                printf("Datei-Eintrag Nr.%d",i++);
                printf("\nName: \t\t%s",adr.ort);
                printf("\nTemperatur: \t\t%f",adr.temp[1]);
                printf("\nNiederschlag: \t\t%i",adr.niederschalg[1]);
                printf("\nLuftdruck: \t\t%i",adr.luftdruck[1]);
                printf("\nLuftfeuchte: \t\t%i",adr.luftfeuchte[1]);
                getch();
        }
    fclose(Dateiptr);
    return(0);
}




Ausgabe

Code:
Datei-Eintrag Nr.1
Name:           Leipzig
Temperatur:             228075543727344900000000.000000
Niederschlag:           0
Luftdruck:              259
Luftfeuchte:            0Datei-Eintrag Nr.2
Name:           alle  <--Sollte Halle sein
Temperatur:             -0.000000
Niederschlag:           3
Luftdruck:              776
Luftfeuchte:            536870912Datei-Eintrag Nr.3
Name:           rlin <--Sollte Berlin sein
Temperatur:             461172594444337150.000000
Niederschlag:           0
Luftdruck:              5123
Luftfeuchte:            1073741824Datei-Eintrag Nr.4
Name:           tock <--Sollte Rostock sein
Temperatur:             14.200000
Niederschlag:           1
Luftdruck:              776
Luftfeuchte:            1073741824Datei-Eintrag Nr.5
Name:           erin <--Sollte Schwerin sein
Temperatur:             0.000000
Niederschlag:           0
Luftdruck:              3331
Luftfeuchte:            536870912
Process returned 0 (0x0)   execution time : 11.516 s
Press any key to continue.





Inhalt der .dat

Code:
Ort: Leipzig
Temperatur: 12.500000, 11.000000, 13.400000, 9.500000, 9.500000, 12.300000, 13.400000, 13.000000, 13.500000, 14.000000, 17.799999, 18.000000, 20.000000, 21.400000, 21.000000, 19.200001, 14.600000, 15.800000, 14.700000, 14.900000, 15.300000, 15.200000, 15.000000, 18.299999, 19.900000, 21.000000, 22.000000, 21.299999, 20.900000, 4.000000
Niederschlag: 5, 6, 0, 0, 0, 0, 2, 2, 23, 27, 13, 2, 0, 0, 34, 0, 0, 2, 15, 35, 12, 2, 2, 3, 0, 0, 2, 7, 2, 35
Luftfeuchte: 57.799999, 63.500000, 40.900002, 42.700001, 43.700001, 45.799999, 47.200001, 46.299999, 65.900002, 73.400002, 59.889999, 43.220001, 39.990002, 40.000000, 69.300003, 51.560001, 34.340000, 38.299999, 58.000000, 73.040001, 62.980000, 54.299999, 49.230000, 47.200001, 49.000000, 36.459999, 37.000000, 51.779999, 46.389999, 65.599998
  
Ort: Halle
Temperatur: 13.700000, 12.200000, 14.600000, 10.700000, 10.700000, 13.500000, 14.600000, 14.200000, 14.700000, 15.200000, 19.000000, 19.200001, 21.200001, 22.600000, 22.200001, 20.400000, 15.800000, 17.000000, 15.900000, 16.100000, 16.500000, 16.400000, 16.200001, 19.500000, 21.100000, 22.200001, 23.200001, 22.500000, 22.100000, 14.000000
Niederschlag: 8, 9, 3, 3, 3, 3, 5, 5, 26, 30, 16, 5, 3, 3, 37, 3, 3, 5, 18, 38, 15, 5, 5, 6, 3, 3, 5, 10, 5, 38
Luftfeuchte: 62.799999, 68.500000, 45.900002, 47.700001, 48.700001, 50.799999, 52.200001, 51.299999, 70.900002, 78.400002, 64.889999, 48.220001, 44.990002, 45.000000, 74.300003, 56.560001, 39.340000, 43.299999, 63.000000, 78.040001, 67.980003, 59.299999, 54.230000, 52.200001, 54.000000, 41.459999, 42.000000, 56.779999, 51.389999, 39.549999
  
Ort: Berlin
Temperatur: 12.900000, 11.400000, 13.800000, 9.900000, 9.900000, 12.700000, 13.800000, 13.400000, 13.900000, 14.400000, 18.200001, 18.400000, 20.400000, 21.799999, 21.400000, 19.600000, 15.000000, 16.200001, 15.100000, 15.300000, 15.700000, 15.600000, 15.400000, 18.700001, 20.299999, 21.400000, 22.400000, 21.700001, 21.299999, 23.000000
Niederschlag: 5, 6, 0, 0, 0, 0, 2, 2, 23, 27, 13, 2, 0, 0, 34, 0, 0, 2, 15, 35, 12, 2, 2, 3, 0, 0, 2, 7, 2, 35
Luftfeuchte: 64.800003, 70.500000, 47.900002, 49.700001, 50.700001, 52.799999, 54.200001, 53.299999, 72.900002, 80.400002, 66.889999, 50.220001, 46.990002, 47.000000, 76.300003, 58.560001, 41.340000, 45.299999, 65.000000, 80.040001, 69.980003, 61.299999, 56.230000, 54.200001, 56.000000, 43.459999, 44.000000, 58.779999, 53.389999, 72.669998
  
Ort: Rostock
Temperatur: 13.300000, 11.800000, 14.200000, 10.300000, 10.300000, 13.100000, 14.200000, 13.800000, 14.300000, 14.800000, 18.600000, 18.799999, 20.799999, 22.200001, 21.799999, 20.000000, 15.400000, 16.600000, 15.500000, 15.700000, 16.100000, 16.000000, 15.800000, 19.100000, 20.700001, 21.799999, 22.799999, 22.100000, 21.700001, 16.000000
Niederschlag: 6, 7, 1, 1, 1, 1, 3, 3, 24, 28, 14, 3, 1, 1, 35, 1, 1, 3, 16, 36, 13, 3, 3, 4, 1, 1, 3, 8, 3, 36
Luftfeuchte: 61.799999, 67.500000, 44.900002, 46.700001, 47.700001, 49.799999, 51.200001, 50.299999, 69.900002, 77.400002, 63.889999, 47.220001, 43.990002, 44.000000, 73.300003, 55.560001, 38.340000, 42.299999, 62.000000, 77.040001, 66.980003, 58.299999, 53.230000, 51.200001, 53.000000, 40.459999, 41.000000, 55.779999, 50.389999, 68.669998
  
Ort: Schwerin
Temperatur: 12.500000, 11.000000, 13.400000, 9.500000, 9.500000, 12.300000, 13.400000, 13.000000, 13.500000, 14.000000, 17.799999, 18.000000, 20.000000, 21.400000, 21.000000, 19.200001, 14.600000, 15.800000, 14.700000, 14.900000, 15.300000, 15.200000, 15.000000, 18.299999, 19.900000, 21.000000, 22.000000, 21.299999, 20.900000, 12.000000
Niederschlag: 5, 6, 0, 0, 0, 0, 2, 2, 23, 27, 13, 2, 0, 0, 34, 0, 0, 2, 15, 35, 12, 2, 2, 3, 0, 0, 2, 7, 2, 35
Luftfeuchte: 57.799999, 63.500000, 40.900002, 42.700001, 43.700001, 45.799999, 47.200001, 46.299999, 65.900002, 73.400002, 59.889999, 43.220001, 39.990002, 40.000000, 69.300003, 51.560001, 34.340000, 38.299999, 58.000000, 73.040001, 62.980000, 54.299999, 49.230000, 47.200001, 49.000000, 36.459999, 37.000000, 51.779999, 46.389999, 63.669998
  
Ort: Cottbus
Temperatur: 14.900000, 13.400000, 15.800000, 11.900000, 11.900000, 14.700000, 15.800000, 15.400000, 15.900000, 16.400000, 20.200001, 20.400000, 22.400000, 23.799999, 23.400000, 21.600000, 17.000000, 18.200001, 17.100000, 17.299999, 17.700001, 17.600000, 17.400000, 20.700001, 22.299999, 23.400000, 24.400000, 23.700001, 23.299999, 4.000000
Niederschlag: 9, 10, 4, 4, 4, 4, 6, 6, 27, 31, 17, 6, 4, 4, 38, 4, 4, 6, 19, 39, 16, 6, 6, 7, 4, 4, 6, 11, 6, 39
Luftfeuchte: 66.800003, 72.500000, 49.900002, 51.700001, 52.700001, 54.799999, 56.200001, 55.299999, 74.900002, 82.400002, 68.889999, 52.220001, 48.990002, 49.000000, 78.300003, 60.560001, 43.340000, 47.299999, 67.000000, 82.040001, 71.980003, 63.299999, 58.230000, 56.200001, 58.000000, 45.459999, 46.000000, 60.779999, 55.389999, 68.230003
  

  




Würde mich über jede hilfe sehr freuen.

Dieser Post wurde am 05.01.2016 um 14:54 Uhr von MasterZyper editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.01.2016, 16:34 Uhr
ao

(Operator)


Da sind noch ganz andere Fehler, die Wetterdaten, die du ausgibst, sind völliger Humbug. Temperatur in Leipzig 228075543727344900000000.000000 - wundert dich sowas nicht?

Der grundlegende Fehler, der all das verursacht, ist, dass die Datei die Wetterdaten in lesbarem Text enthält, also mit fscanf gelesen werden muss und nicht mit fread. Hier musst du dran arbeiten. Das mit dem um 1 verschobenen Ortsnamen ist nur Zufall.

Übrigens, für Luftdruck hast du überhaupt keine Daten.

Was genau von diesem Programm ist vom Lehrer vorgegeben und was hast du selber geschrieben?

Dieser Post wurde am 05.01.2016 um 16:40 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: