Stream-Problem



  • Hallo!

    In meinem Programm wird eine Datei geöffnet und ausgegeben.
    Nun meine Problem: Der letzte Buchstabe wird doppelt ausgegeben!

    Sowas in der Art:

    ...
    ifstream file_in;
    string filename = "datei.txt";
    
        file_in.open(filename.c_str, ios_base::in);
    
            if(!file_in)
                {
                    cout << "Fehler: Die Datei konnte nicht geöffnet werden!" << endl;
                    return -1;
                }
    
        while(!file_in.eof())
                {
        char zeichen;
               file_in.get(zeichen);
        cout << zeichen;
                }
                ...
    

    Inhalt von "datei.txt" = Ich bin ein String
    Aber ausgegeben wird folgender Text: Ich bin ein Stringg

    Was mache ich falsch?

    MfG CSS



  • Standard Fehler 🙂

    std::basic_istream::eof liefert erst EOF, wenn man eof gelesen hat! Deswegen wird deine Schleife einmal zu oft ausgeführt.

    Lösungen
    a)

    int n;
    while( (n=in.get()) != in::traits_type::eof()) {
      std::cout << static_cast<char>(n);
    }
    

    b)

    for(;;) {
      char c;
      in.get(c);
      if(in.eof())
        break;
      std::cout << c;
    }
    



  • ach btw.

    ifstream file_in;
    string filename = "datei.txt";
    
        file_in.open(filename.c_str, ios_base::in);
    

    mach daraus lieber

    string filename="datei.txt";
    ifstream file_in(filename.c_str());
    

    http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=Declare#Answ



  • dank!
    Deine 2 Lösung gefällt mir besser 😃 , da ich die 1 nicht verstehe!

    MfG CSS



  • wie ich gerade bemerkte (danke an MrN :)), hab ich die eifnachste Lösung übersehen

    char c;
    while(in.get(c))
      std::cout << c;
    

Anmelden zum Antworten