struct in datei schreiben und lesen?



  • Hallo,

    wollte grad inhalt von structarray in datei schrieben und wieder lesen!
    schreiben geht wohl aber lesen nicht

    struct Person
    {
     short alter;
     char name[20];
    };
    int main(int argc, char* argv[])
    {
    Person p[3];
    Person ps[3];
    p[0].alter=12;
    strcpy(p[0].name,"Detlef");
    p[1].alter=24;
    strcpy(p[1].name,"SEW");
    p[2].alter=30;
    strcpy(p[2].name,"frer");
    
    ofstream out("test.txt");
    if(out)
    {
     for(int i=0;i<3;i++)
     {
      out<<p[i].alter<<" "<<p[i].name<<endl;
     }
    }
      out.close();
    
    int i=0;
    ifstream in("test.txt");
    if(in)
    {
     while(in)
     {
      in>>ps[i].alter;
      cout<<"Alter: "<<ps[i].alter;
      i++;
     }
    
     }
    
     getch();
       return 0;
    }
    

    es kommt

    Alter: 12 Alter:5367
    

    wie geht es richtig!

    PS: für was brauch ich das ios::binary eigentlich??



  • Ich empfehle die FAQ Lektüre über Ströme, da steht dein Beispiel drin.



  • Hi!

    Du speicherst zwar jeweils alter und name, liest aber nur alter wieder ein. Schon klar dass das Probleme macht oder?

    grüße



  • In deiner Datei steht nach der Ausgabeschleife folgendes drin:

    12 Detlev
    24 SEW
    30 frer
    

    Jetzt liest du stückweise dort die Altersangaben aus (bzw versuchst es) - im ersten Schleifendurchlauf klappt das, beim zweiten Durchlauf kommt der operator>> auf das 'D' von "Detlev" - und das kann er nicht als Zahl interpretieren.

    D.h., du müsstest schon die Namen der Personen mit einlesen (oder überlesen mit ignore()).

    PS: ios::binary ist für Binärdateien gedacht - das schaltet die Umdeutung der Zeilenende-Zeichen ab (C++'s \n wird für Windows in \r\n übersetzt).


Anmelden zum Antworten