Forum: PC-Programmierung Konsolenprogramme Eingabe


von Dieter (Gast)


Lesenswert?

Hallo

Für die Steuerung von Konsolenprogrammen benötige ich 2 Sachen.

Zum einen die Konsole leeren. Dafür habe ich leider noch keine 
Plattformunabhängige Lösung gefunden. Gibt es so etwas überhaupt?

Und dann für die Menüpunkte das Abfragen eines Zeichens. Allerdings ohne 
Enter zu drücken zum bestätigen. Gibt es da etwas in der 
Standardbibliothek?


Gruß

: Verschoben durch User
von Peter (Gast)


Lesenswert?

Dieter schrieb:
> Und dann für die Menüpunkte das Abfragen eines Zeichens. Allerdings ohne
> Enter zu drücken zum bestätigen. Gibt es da etwas in der
> Standardbibliothek?

getc müsste dafür gehen, aber damit kann man nicht die sondertastern 
abfragen( alt, strg usw)

von Sven P. (Gast)


Lesenswert?

Dieter schrieb:
> Hallo
>
> Für die Steuerung von Konsolenprogrammen benötige ich 2 Sachen.
>
> Zum einen die Konsole leeren. Dafür habe ich leider noch keine
> Plattformunabhängige Lösung gefunden. Gibt es so etwas überhaupt?
Kommt drauf an, was du unter 'plattformunabhängig' verstehst. Es gibt 
z.B. (n)curses: Das läuft mehr oder weniger auf sämtlichen 
UNIX-Derivaten, Linux, BSD, MacOS etc. inbegriffen. Nur m.W.n. natürlich 
unter Windoof nicht. Für mich ist das plattformunabhängig, wenn man eine 
aus zig Plattformen nicht unterstützt.
(Es gibt/gab aber mal ein curses für Windows. pdcurses hieß das, glaube 
ich)

> Und dann für die Menüpunkte das Abfragen eines Zeichens. Allerdings ohne
> Enter zu drücken zum bestätigen. Gibt es da etwas in der
> Standardbibliothek?
Auch ncurses. Alternativ funktioniert unter UNIX-Derivaten, die Konsole 
in den nicht-kanonischen Modus zu bringen, etwa mit termio oder termios.

Für DOS gabs früher(tm) getch() (mit C-H am Ende), ist aber nicht 
portabel.

von Klaus W. (mfgkw)


Lesenswert?

Das getch() heißt inzwischen m.W. _getch(), dazu gehört
ein _kbhit() - damit kann man fragen, ob noch Zeichen da sind
unter Windows.
Ohne eine solche Funktion wird es schwierig, die Eingabe zu
leeren, weil man ja nur (über-) lesen will, solange etwas da ist.

Diese beiden sind nicht direkt portabel, aber ich habe sie
für Linux nachprogrammiert, falls jemand Bedarf hat.

von Dieter (Gast)


Lesenswert?

Also bei mir funktionieren weder _getch() noch getch(). Also er findet 
sie nciht.

von Klaus W. (mfgkw)


Lesenswert?


von Dieter (Gast)


Lesenswert?

Ok ich nutze leider kein Windows. Daran wird es wohl liegen. Das Problem 
ist, dass ich das Programm zusammen mit anderen schreibe, und einige 
nutzen auch Windows. Deshalb sollte es unter allen gängigen 
Betriebssystemen lauffähig sein.

Ich habe auch noch ein wenig herumprobiert. Etwas gescheites habe ich 
noch nicht gefunden.

Also ich möchte:

-Konsole löschen
-Auf Tastendruck reagieren
-Tastaturpuffer leeren

Aber was ich bis jetzt so gelesen habe ist das alles höchst 
Plattformabhängig.

von Floh (Gast)


Lesenswert?

Für Konsole "löschen" könnte man einfach z.B. 40 mal "newline" ausgeben, 
damit das Fenster wieder schwarz ist :-)

von Klaus W. (mfgkw)


Lesenswert?

PS:

Das Leeren des Puffers würde dann so aussehen:
1
#include <conio.h>
2
...
3
   while( _kbhit() )
4
   {
5
       getch();
6
   }

von Klaus W. (mfgkw)


Lesenswert?

Floh schrieb:
> Für Konsole "löschen" könnte man einfach z.B. 40 mal "newline" ausgeben,
> damit das Fenster wieder schwarz ist :-)

Unter dem Löschen hatte ich das Löschen des Eingabepuffers verstanden;
deine Variante kann natürlich genauso zutreffen.

Da kann man dann aber in der Konsole wiederum die passende
ANSI-Sequenz heraussuchen.

Oder:
http://msdn.microsoft.com/en-us/library/ms682022(VS.85).aspx

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.