Programm hat Problem festgestellt...



  • Hi,

    ich habe mir hier aus dem Forum einen Schnipsel geholt um Zeilen aus einer Textdatei auszulesen, ich will sie aber anders herum ausgeben, als sie ausgelesen werden...doch wenn ich die for-Schleife so umbaue geht garnichts mehr, sondern das Programm stürzt ab: Programm hat Problem festgestellt und muss beendet werden...

    Warum???

    #include <iostream> 
    #include <fstream> 
    #include <string> 
    #include <vector> 
    
    int main(){ 
    char cText[255];
    std::vector<std::string> filecontent; 
    std::string tmp; 
    std::ifstream ifs("test.txt"); 
    
    while(!ifs.eof()){ 
        std::getline(ifs,tmp); 
        filecontent.push_back(tmp); 
    
    } 
    
    ifs.close(); 
    int nr;
    for(int i=0;i<filecontent.size();++i) 
            {
            nr = filecontent.size() - i;                             
            std::cout<<filecontent[nr]<<std::endl;
            std::cout<< nr;
            }
            std::cout<<filecontent.size();
    std::cin >> cText;
    }
    

    Wenn ich bei filecontent[] einfach nur i einsetze funktioniert alles...sonst bei jeder "rumgedrehten" Variante nicht...

    Vielen Dank schon mal
    El_Sid



  • for(int i=1;i<=filecontent.size();++i)
    


  • Hi,

    Das liegt daran das du versucht auf ein element zuzugreifen das es nicht gibt.

    Angenommen deine Datei hat 10 zeilen sind die Indexes für den vector 0-9 du greifst aber gleich am anfang auf 10 zu => Booom 😉

    So ist es kannst du es auch machen:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    
    int main(){
    std::vector<std::string> filecontent;
    std::string tmp;
    std::ifstream ifs("test.txt");
    
    while(!ifs.eof()){
        std::getline(ifs,tmp);
        filecontent.push_back(tmp);
    
    }
    
    ifs.close();
    int nr;
    typedef std::vector<std::string>::reverse_iterator strveciter_t;
    size_t pos = 0;
    for(strveciter_t it = filecontent.rbegin(), end = filecontent.rend(); it != end; ++it)
    {
       std::cout << "Zeile: " << ++pos << " ";
       std::cout << *it << std::endl;
    }
    
    std::cout<<filecontent.size();
    std::cin.get();
    }
    




  • Vielen Dank für Eure schnelle Hilfe...allerdings habe ich selber einen Weg gefunden, wie ich das Problem...nunja umgehe...wenn ich nämlich die neue Zeile logischer Weise an den Anfang der Datei adde, brauch ich nachher nichts mehr rumdrehen, dann ist es schon richtig...

    Trotzdem vielen Dank...ich werde Eure Tipps bei der Programmansicht berücksichtigen, die ist nämlich durch die Änderung jetzt verkehrt rum...

    Vielen Dank,
    El_Sid


Anmelden zum Antworten