String ausgeben?



  • Hey ihr,

    Habe ein sonderbares Problem.
    Folgender Text sollte eigentlich die Datei 'Test.txt' öffnen und alle Zeichen in ihr ausgeben.
    Es wird aber garnichts ausgegeben.

    #include <iostream> 
    #include <string>
    #include <fstream>
    using namespace std; 
    int main () 
    { 
       fstream datei("Test.txt",ios::in|ios::out);
       int a=0;
       char x;
       string text;
       while(!datei.eof())
       {      
          text[a] = datei.get();
          a++;                   
       }   
       cout << text << endl;
       system("Pause");
    }
    

    'text' wird nur dann ausgegeben, wenn ich eine Schleife schreibe wo immer nur auf ein Element zugegriffen wird.
    Bei Strings dürfte das aber eigentlich nicht so sein... find das schwer komisch.
    Weil folgendes Funktioniert ja einwandfrei:

    #include <iostream> 
    #include <string>
    #include <fstream>
    using namespace std; 
    int main () 
    {
       string text = "HALLI HALLO";
       cout << text << endl;
       system("Pause");
    }
    

    cya
    David



  • Du hast einen leeren String angelegt und schreibst dann über den Index-Operator in Elemente, die offiziell gar nicht zum String gehören - da kannst du echt froh sein, daß "nur" nichts ausgegeben wird. Wenn du willst, daß der String auch etwas von den ankommenden Zeichen bemerkt, solltest du die Zuweisung text[a]=datei.get(); ersetzen durch text.push_back(datei.get()); .



  • ähh... hehe....-.-naja du hast recht ;-)^^
    Ich bin echt mal gespannt, wann der Tag kommt, wo ich sowas selbst merke^^



  • 777 schrieb:

    Ich bin echt mal gespannt, wann der Tag kommt, wo ich sowas selbst merke^^

    Dann wenn dir dein Programm um die Ohren fliegt und du nach laengerem Debugging siehst was Sache ist 😉



  • Das war mal 'n Wort! 😉



  • #include <iostream>
    #include <string>
    #include <fstream>
    #include <iterator>
    #include <algorithm>
    
    int main ()
    {
        std::ifstream file_stream("test.txt");
        if (!file_stream) { std::cerr << "Datei konnte nicht geöffnet werden!" << std::endl; return 1; }
        std::string content;
        std::copy(std::istream_iterator<char>(file_stream), std::istream_iterator<char>(), std::back_inserter(content));
        std::cout << content << std::endl;
        std::cin.get();
    }
    

    sollte auch gehen ...


Anmelden zum Antworten