Datei einlesen! eof



  • Hi, danke für eure hilfe zuerst!!

    Hab aber noch eine kleine frage!
    Ich will eine bestimmte anzahl von zahlen aus einer datei einlesen

    das mach ich solange bis das ende der datei erreicht ist! jedoch mit

    while (!testfile.eof()){ ..}
    

    liest er mir in die liste auch noch nach dem letzten element eine 0 (NULL) ein!

    was kann ich machen?? sag danke!

    aja falls ihr sonst noch wichtige dinge für den umgang mit datein hättet wäre ich
    auch dankbar
    MFG johann



  • eof wird *nach* dem Zugriff, der über das Ende der Datei hinauslesen würde, gesetzt.



  • aja falls ihr sonst noch wichtige dinge für den umgang mit datein hättet wäre ich
    auch dankbar

    Schon die FAQs gelesen?

    Ströme und Dateien in C++

    das mach ich solange bis das ende der datei erreicht ist! jedoch mit

    while (!testfile.eof()){ ..}

    Sehr beliebter Fehler. Das eof-bit wird erst gesetzt *nachdem* eof gelesen wurde. Eine solche Schleifenbindung führt also dazu, dass du zu weit liest.

    Richtig ist sowas:

    int i;
    while (testfile >> i) {...}
    

    oder auch:

    char i;
    while (testfile.get(ch)) {...}
    

    oder:

    string s;
    while (getline(testfile, s)) {...}
    

    Ich bevorzuge hier in der Regel aber eine for-Schleife:

    for (string s; getline(testfile, s);) {...}
    


  • oder du nutzt weiterhin die eof()-Funktion und machst das so:

    testfile >> strBuffer;           // erste Zeile auslesen
    while (!testfile.eof()) {
      // ...hier die Zeile verarbeiten...
      testfile >> strBuffer;        // ...und erst jetzt die nächste Zeile lesen
    }
    

    So hab ich das bisher immer gemacht. Allerdings geb ich zu, dass das nur anwendbar ist, wenn du weißt, dass zumindest eine auswertbare Zeile in der Datei ist, sonst gibt's beim ersten Lesen vor der Schleife einen Fehler 🙄

    Mfg, smasher1985


Log in to reply