www.mikrocontroller.net

Forum: PC-Programmierung Konsolenprogramme Eingabe


Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 Moderator
Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also bei mir funktionieren weder _getch() noch getch(). Also er findet 
sie nciht.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Floh (Gast)
Datum:

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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS:

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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.