C# Console Frage?
Console.SetCursorPosition(0, 0);
Console.Write("Hallo Welt");
Console.SetCursorPosition(0, 1);
Console.Write("Hallo Du");
Console.SetCursorPosition(0, 0);
Console.Write("Your custom message");
Ich printe zwei Nachrichten: "Hallo Welt" und "Hallo Du" (in zwei unterschiedlichen Zeilen)
jetzt möchte ich das die erste Nachricht durch "Your custom message" ersetzt wird, ich dachte einfach ich verschiebe den Cursor, schreibe neu und damit hat sich's. Falsch gedacht: Die zweite Nachricht ,,Hallo Du" verschwindet dann! Warum?
Die Console besteht dann sozusagen nur noch aus der Nachricht "Your custom message". Wie löse ich das?
(Und nein ich möchte nicht "Hallo Du" nochmal ausgeben, das würde ja bedeuten wenn ich mitten drin etwas ändern will das ich allen Text danach irgendwie zwischenspeichern müsste)
2 Antworten
Ich kann das Problem in einer Windows Konsole nicht reproduzieren. Stattdessen tritt das erwartete Zielverhalten ein.
Mögliche Gründe, die mir einfallen, warum es bei dir nicht klappt:
- Du führst die Anwendung über eine Konsolenanwendung aus, die sich bei der Verwendung von Write und SetCursorPosition anders als die Windows Konsole verhält. Beachte, dass einige IDEs (Beispiel: Eclipse) eine Eigenimplementation einer Konsole integriert haben.
- Bei Aktualisierung der ersten Zeile rutscht die zweite Zeile aus den sichtbaren Fensterbereich. Schau nach, ob du im Konsolenfenster scrollen kannst.
- Du führst noch andere Anweisungen / Aktionen aus, die in deiner Fragebeschreibung nicht benannt werden.
Das fehlende H ist da, wenn ich das Fenster so mit dem Explorer öffne und nicht mit visual studio run mode. Insbesondere ein ,,ReadKey" am Ende führt dazu, dass ich mein Verhalten sehe ohne ein zusätzliches WriteLine();
Ich konnte es nun auf einem anderen Rechner reproduzieren. Da sich der Cursor noch in der ersten Zeile befindet, werden nachkommende Ausgaben vom System (so wie die Ausgabe des Kontextpfads nach Ausführung der Anwendung) die Folgezeilen überschreiben.
Du solltest vor Programmende (bzw. nach dem Überschreiben) die Cursorposition wieder ans Ende (z.B. in die dritte Zeile) setzen:
Console.SetCursorPosition(0, 2);
Was genau ist das Problem? Funktioniert doch genau so, wie es soll ...
Möglicherweise ist da ein anderer Fehler, den man nicht ausfindig machen kann, da zu wenig Informationen vorhanden sind. Oder verstehe ich da etwas falsch?
Kompiliert und getestet auf Windows und Linux (Ubuntu)
Probier es mal ohne ReadKey(); und öffne es auf Windows direkt aus dem Terminal heraus, nicht bei der Doppelklick im Explorer, sonst sieht man ja nichts x)
Interessant. Habe es nun probiert mit Windows Terminal (Außerhalb des VS Debug Modus) und der alten Ansicht aus Prä Windows 11 Zeiten. Selbes Verhalten.
Bei mir scheint es so, als würde der aktuelle Pfad der nach der Ausführung erscheint, direkt nachrutschen,
Mache ich es so:
Erhalte ich Ausgabe:
"Your custom message
allo Du"
Was mit dem h geschehen ist, keine Ahnung!
Scrollen kann ich nicht, nein.