getline Bufferproblem



  • 1. ich hab heute nen schlechten Tag und bekomm nichts gebacken
    2. ich mach nen neuen Thread auf, weil getline als Abbruchbedingung trifft es bei mir nicht so ganz aber fast:

    string sSend = "";
    
    	while(sSend.compare("exit") != 0)
    	{
    		cout << "Send  : ";
    
    		getline(cin, sSend, '\n');
    		cout << sSend << "(" << sSend.compare("exit") << ")" << endl;
    	}
    

    Eigentlich kann man bei sowas ja net viel Falsch machen.

    1. nach meiner ersten Eingabe bestätigt mit Return muss ich nochmal Returnen. Danach liefert die Ausgabe immer das vorvorherige gewünschte Ergebnis

    Send  : test
    
    test(1)
    Send  : test
    (-1)
    Send  : exit
    test(1)
    Send  :
    

    Habe schon mit cin.clear und cin.ignore herumgespielt, aber war nicht so toll 😃



  • Ich kann das Problem mit diesem Code nicht nachvollziehen!



  • du nimmst den oberen Code und steckst ihn in eine Konsole.
    Danach gibst du "test" ein.
    Das ist ungleich "exit" und sollte dafür sorgen, dass ich die nächste Eingabe mache. Der untere Teil gibt blos die Konsolenausgabe an.

    Kurz gesagt: Das was ich bei getline eingebe wird eine Zeile weiter bei cout nicht ausgegeben.

    Mal zum Vergleich mit dem char

    char sSend[255] = "";
    
        while(strcmp(sSend, "exit") != 0)
        {
            cout << "Send  : ";
    
            cin.getline(sSend, sizeof(sSend), '\n');
            cout << sSend << "(" << strcmp(sSend, "exit") << ")" << endl;
        }
    

    Ausgabe Konsole:

    Send  : test
    test(1)
    Send  : exit
    exit(0)
    Press any key to continue
    

    Geht wunderbar.
    Aber ich dachte, nehm halt strings, die sind ja laut c++-Forum so toll 😃



  • BasicMan01 schrieb:

    du nimmst den oberen Code und steckst ihn in eine Konsole.
    Danach gibst du "test" ein.
    Das ist ungleich "exit" und sollte dafür sorgen, dass ich die nächste Eingabe mache. Der untere Teil gibt blos die Konsolenausgabe an.

    Ich weiß sehr wohl wie ich diesen Code in ein lauffähiges Program umwandle und ich kann auch genau erkennen was der Code zu tun verspricht...

    Kurz gesagt: Das was ich bei getline eingebe wird eine Zeile weiter bei cout nicht ausgegeben.

    ... kurz gesagt: genau das tut er bei mir!

    Send  : test
    test(1)
    Send  : foo
    foo(1)
    Send  : bar
    bar(-1)
    Send  : exit
    exit(0)
    


  • David_pb schrieb:

    Ich weiß sehr wohl wie ich diesen Code in ein lauffähiges Program umwandle und ich kann auch genau erkennen was der Code zu tun verspricht...

    Wäre ja auch schlimm, wenn nicht 😃

    Naja, dann hab ich schonmal kein Problem mit dem Code und hat mit C++ dann erstmal weniger zu tun. 🙄 ich verwende übrigens VC++ 6,
    *heul* ich nehm gleich char



  • BasicMan01 schrieb:

    nach meiner ersten Eingabe bestätigt mit Return muss ich nochmal Returnen. Danach liefert die Ausgabe immer das vorvorherige gewünschte Ergebnis

    ich schließe aus dem Verhalten, dass Deine Entwicklungsumgebung VS6 (oder 7?) ist, und Du die originale mitgelieferte STL nutzt.
    Die hat einen Bug in getline, der in etwa dieses Verhalten verursacht.

    Gruß
    Werner



  • GENIAL .... Danke Werner 😋

    Hab in der string.h die Zeile

    _I.rdbuf()->snextc();

    auskommentiert und die Zeile

    _I.rdbuf()->sbumpc();

    danach eingefügt.
    Dann mein Programm neu erstellt und funkst.

    Und ich dachte, ich könnte net mehr programmieren 😃


Anmelden zum Antworten