Cout überschreibt Cin
-
Yuhuu,
Also wie der Name schon sagt wird dass eingetippte (cin) von der cout Ausgabe überschrieben.
Wenn ich trotzdem zu ende schreibe und Enter drücke werden auch alle getippten Zeichen abgeschickt, also Funktionell ist alles okay aber Optisch halt unschön...
erbitte hilfe
-
Also, wenn ich dein Problem richtig verstehe... Mach doch einfach 'nen Zeilenumbruch.
-
hm ich glaub so einfach ist das nicht
Ein Zeilenumbruch bewirkt nur das mein Eingegebener Text nicht mit dem cout Text in eine Zeile geschoben wird. Geordnete Unordnung^^ sozusagen...also Es laufen permanent cout Ausgaben.
Dann läuft ein zweiter Thread der auf cin Eingaben wartet und diese Eingaben dann an den Server schickt.
Wenn ich nun Text schreibe und es komm gleichzeitig cout an wird mein eingegebener Text Optisch überschrieben
ich gebe Quasi in Line 1 oder 0 der cmd den Text ein und cout schreibt gleichzeitig Text in diese Zeile. Das kann ja nur schief gehen :-))
-
so ist das kristallkugel
was verwendest du? die string klasse aus dem namespace std? oder einen charpointer für Zeichenketten?
also: schließt du die Zeichenkette ordentlich ab?nennst du die variablen gleich? einkommend, ausgehend?
irgendwie ist das alles nicht klar.
-
Genau so sieht das aus:
es werden nur die texte überschrieben die ich noch nicht abgeschickt habe
while(1)
{
cout << "wort"<<endl; // ausgabe nu reine strings
Sleep(3000);
}Neuer Thread
while(1)
{
string s;
getline(cin, s);send(socket, bla, s, 0, 0);
}
-
Falls Du unter Windows programmierst, kannst Du mit den Konsolenfunktionen aus der WinApi Deine Konsolenausgaben genau positionieren.
-
Lechim schrieb:
ich gebe Quasi in Line 1 oder 0 der cmd den Text ein und cout schreibt gleichzeitig Text in diese Zeile. Das kann ja nur schief gehen :-))
Ja wie hättest du es denn gern? Sprich: Wie ist das gewünschte Verhalten?
-
MFK schrieb:
Ja wie hättest du es denn gern? Sprich: Wie ist das gewünschte Verhalten?
Das dass was ich gerade eintippe nicht verschwindet wenn eine Cout Ausgabe erscheint.
hab es schon damit versucht
::COORD coord = {20,40};
::SetConsoleCursorPosition(::GetStdHandle(STD_OUTPUT_HANDLE), coord);Habe cin an eine stelle gesetzt und cout an eine andere trotzdem gleicher effekt sogar noch schlimmer wie vorher trotz endl; "\n" wird der bereits per cout ausgegebene Text nicht gescrollt.. somit überschreibt cout sich selbst und noch meine eingaben ... habe auch schon überlegt die koordinaten pro durchgang zu erhöhen aber das kann nicht klappen... da manchmal cout einen 1 zeiler bis 100 zeiler ausgibt...
kotz an.. werd mir wohl ein extra script als eingabelement schreiben ist weniger nervtötend...
-
Würde sagen, du musst deine Threads synchronisieren.
Gruß,
B.B.
-
Oh weia mutex und so... ich glaub ich leg ein Ei gleich -.- habs per script gemacht kein bock drauf...