Forum: PC-Programmierung konsolenapplikation C zeilenwechsel


von Kartoffel S. (kartoffelsalat)


Lesenswert?

Hallo zusammen

Ich habe ein kleines Spiel in c programmiert (konsolenapplikation).
Das Spielfeld wird jeweils in Form einer Tabelle ausgegeben.
Nach jeder Runde wird die Tabbelle aktualisiert und erneut ausgegeben.

damit jetzt aber nicht immer eine neue Tabelle unter der vorherigen 
ausgegeben wird, möchte ich die Alte überschreiben.

mit \b kann man die zeichen löschen (backspace), aber nur auf einer 
zeile. wie komme ich auf die obere zeile zurück?

im Hyperterminal funktioniert das mit  der ESC- Sequenz Putchar "ESC[A"
oder
  putchar (0x1b);
  putchar ('[');
  putchar ('A');

in der konsole werden nur die zeichen selbst '<-[A' ausgegeben.

hat jemand eine gute Idee?

Gruss Raphael

von Wiesi (Gast)


Lesenswert?

Nun. Die Steuerbefehle hängen davon ab, welches Terminal das ist (bzw. 
welches emuliert wird). VT100, VT102, Linux Console, ANSI blabla etc.

Eine Zusammenstellung für Linux Console ist z.B: 
(http://www.rt.com/man/console_codes.4.html).

Generell, wenn das portabel sein soll, ist es aber besser man 
programmiert die Codes nicht fix ein, sondern verwendet eine Lib die das 
macht (und diverse, passende Codesätze kennt=, z.B: ncurses oder slang.

   Wiesi

von Kartoffel S. (kartoffelsalat)


Lesenswert?

wie finde ich heraus welches terminal simuliert wird?
es ist ja eigentlich kein richtiges terminal, sondern lediglich eine 
console wie der cmd promt...

ist dies überhaupt möglich in dieser konsole?

von Schoaschi (Gast)


Lesenswert?

Wie wäre es mit einem "clear Screen" und das ganze einfach neu machen? 
Also nicht überschreiben.

von Kartoffel S. (kartoffelsalat)


Lesenswert?

wie geht den das?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Sofern Du die Windows-Konsole meinst, kannst Du auf dieser keine 
ANSI-Escape-Sequenzen verwenden. Die Windows-Konsole emuliert überhaupt 
kein Terminal, genausowenig, wie das DOS ohne ANSI.SYS tat.
Erst letzteres (ANSI.SYS) ist die Terminalemulation, kann aber nicht 
unter Windows verwendet werden (DOS-Devicetreiber ...).

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.
Ein großer Unterschied zu "putc('\x0c');"!

Ein einfacherer Weg besteht möglicherweise darin, nach einem nativen 
Win32-Port von (n)curses zu suchen, der sollte den Job übernehmen.

von Kartoffel S. (kartoffelsalat)


Lesenswert?

Danke für eure Hilfe.

ich habe es so gelöst:

system("cls");

löscht die gesamte konsole... funkt perfekt...

manchmal ist es einfacher als man denkt.

Ich arbeite mit windows Xp Prof.
und dem dev-C compiler
(windowskonsole..)
gruss raphael

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.