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 continueGeht 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
