Forum: PC-Programmierung printf() auf bestimmte Position


von Johannes T. (johnsn)


Lesenswert?

Hallo!

Ich programmiere gerade eine simple Prozessüberwachungssimulierung.
Dabei habe ich ein Win32-Konsolenprojekt in C++ geschrieben.

Nun habe ich 3 Messwerte, die ich auf die Konsole ausgeben will. Dabei 
soll die erste Zeile für Messwert 1, die 2. für MW 2, usw sein. Wenn ich 
jetzt einfache cout oder printf mache, dann werden die Messwerte (die in 
unterschiedlichen Zeitabständen aktualisiert werden sollen) 
hintereinander geschrieben. Ich möchte es so machen, dass sich nur die 
2. Zeile ändert, wenn Messwert 2 aktualisiert wurde.

Gibt es eine Möglichkeit zu sagen, an welcher Cursor-Stelle das printf 
() ausgeführt werden soll, oder
Welche Möglichkeiten habe ich?

Gruß,
Johnsn

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du wirst nicht umhinkommen, Dich mit den Win32-API-Funktionen zu
beschäftigen, die unter "Console I/O" zusammengefasst werden.

http://msdn2.microsoft.com/en-us/library/ms682010.aspx

ist der Einstieg in deren Dokumentation. Für Dich interessant ist der
Bereich "low-level console I/O".
Besonders einfach oder übersichtlich sind die Funktionen dort jedoch
nicht.

http://msdn2.microsoft.com/en-us/library/ms682022.aspx

zeigt, wie der Inhalt der Konsole gelöscht werden kann.


Allerdings wird hier Beitrag "Re: Formatierte Textausgabe in C" 
eine Library beschrieben, die einem die Ekligkeiten der 
Konsolenprogrammierung abnimmt.

von Johannes T. (johnsn)


Lesenswert?

Habs mir jetzt aus dieser Wrapper-Lib rausgezupft, danke!
1
  COORD  coordPos;
2
3
  coordPos.X = Xval;
4
  coordPos.Y = Yval;
5
6
  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coordPos);

von Ingo E. (ogni42)


Lesenswert?

Das geht auch - sofern man den Terminal Modus (z.B. ASCII, VT100) kennt 
- mit Escape Sequenzen. Einfach mal nach googlen. Vorteil: Portabilität.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das geht aber nicht in der Windows-Konsole. Die kennt keine 
Escape-Sequenzen.
Für DOS gab es ANSI.SYS, aber der Ansatz ist tot.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.