FDatei.get() == -1 - Was ist da falsch?



  • Hallo!

    Warum kommt bei dem letzen FDatei.get() immer -1 raus, anstatt 'R'?

    Viele Grüße
    pmw

    Programm:

    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    
       unsigned long IDateiLaenge, IDateiListeAnz=0;
       fstream FDatei;
    
       FDatei.open(argv[1], ios::in);
       if (FDatei.is_open() == 0)
       { 
          konsole("Fehler: Konnte Dateiliste nicht öffnen.\n"); 
          exit(0);
       }
       else
       {
    
          FDatei.seekg(0, ios::end);
          IDateiLaenge = FDatei.tellg();    
          FDatei.seekg(0, ios::beg);
    
          for (unsigned long i=0; i<IDateiLaenge; ++i)
          {
             if (FDatei.get() == '\n')
             {
                ++IDateiListeAnz;
             }
          }
    
          if (IDateiListeAnz % 3 == 2)
          {
             ++IDateiListeAnz;
          } 
    
          if (IDateiListeAnz % 3 != 0 || IDateiListeAnz < 3)
          {
             konsole("Fehler: Ungültige Dateiliste.\n"); 
             exit(0);
          }
    
          FDatei.seekg(0, ios::beg);
          cout << IDateiListeAnz << " " << FDatei.get();
          //IDateiListeAnz == 12 - stimmt
          //FDatei.get() == -1 - falsch!!!
    
       }
       FDatei.close();
    
       return 0;
    
    }
    

    Inhalt FDatei:

    RLH
    E:\Eigenes\Eigene Programme\Kompression\
    quelldateien\MiniDatLZ77.hex
    RLH
    E:\Eigenes\Eigene Programme\Kompression\
    quelldateien\MiniDatRLE.hex
    RLH
    E:\Eigenes\Eigene Programme\Kompression\
    quelldateien\MiniDatHuffman.hex
    RLH
    E:\Eigenes\Eigene Programme\Kompression\
    quelldateien\ASCII.hex
    


  • Hallo,

    bei mir funktioniert das so, wenn auch nicht das rauskommt, was du erwartest. Denn FDatei.get() liefert den int Wert das Zeichens, also 82. Die -1 würd ich mal als EOF interpretieren. Den Fehler seh ich jetzt aber auch nicht....



  • Ich werde verrück. Ich überleg schon den ganzen Tag und finde den Fehler einfach nicht 😞



  • Hallo,
    lösche vor dem letzten seekg einfach mal das eof-bit:

    FDatei.clear();
    FDatei.seekg(0, ios::beg);
    cout << IDateiListeAnz << " " << FDatei.get();
    

Anmelden zum Antworten