Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: FAQ - DOS und Win32-Konsole ::  getch(), getche(), kbhit(), getchar()     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
SideWinder
Moderator

Benutzerprofil
Anmeldungsdatum: 19.10.2001
Beiträge: 19109
Beitrag SideWinder Moderator 18:37:00 23.01.2002   Titel:   getch(), getche(), kbhit(), getchar()            Zitieren

Neben der Standardeingabe in C/C++ (scanf() bzw. cin) sind auch noch weitere (meist nicht direkt zum Standard gehörende) Funktionen im Umlauf die einzelne Zeichen einlesen.

getchar() <cstdio> (in C: <stdio.h>) : Diese Funktion gehört zum C/C++-Standard. Sie liest ein Zeichen der Standardeingabe und liefert dieses als Integer zurück, wobei der zurückgegebene Wert das Zeichen im jeweiligen Zeichensatz (z.B. ANSI-Zeichensatz) enthält. Ich persönlich würde sie aber maximal bei standardkonformen Programmen einsetzen, da sie zwar nur ein Zeichen zurückgibt, der Benutzer aber sowohl in der Lage ist mehrere Zeichen einzugeben (diese kommen dann bei weiteren Aufrufen von getchar() zurück - ohne das der Benutzer dann die Chance hat andere Zeichen einzugeben).

getch() <conio.h> : Diese Funktion ist defakto Standard und funktioniert ähnlich wie getchar(). Mit dem Unterschied, dass der Benutzer auch wirklich nur maximal ein Zeichen eingeben kann. Außerdem erzeugt getch() kein Echo auf der Konsole, d.H. der Benutzer sieht nicht was er eingibt (geeignet z.B. für kleine Spiele oder die Eingabe eines Passwortes).

getche() <conio.h> : Diese Funktion ist gleich getch() und erzeugt ein Echo auf der Konsole.

kbhit() <conio.h> (beim DJGPP <pc.h>) : Diese Funktion dient nicht direkt zum Einlesen von Zeichen, sondenr prüft ob der Benutzer eine Taste gedrückt hat. Ist das der Fall liefert die Funktion 1 (true), ansonsten 0 (false). Das Zeichen selbst wird dabei noch nicht gelesen, kann dann aber durch einen direkt darauffolgenden Aufruf von getch() eingelesen werden. Für kleine Spiele in der Konsole ergibt sich folgender Aufbau:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool exit = false;
while(!exit)
{
    if(kbhit()) // Nur wenn auch eine Taste gedrückt ist
    {
        char c = getch(); // Muss auf keine Eingabe warten, Taste ist bereits gedrückt
        switch(c)
        {
            ... // Verarbeite Eingabe
        }
    }
 
    // Bewege andere Spielfiguren (z.B. die Snake-Schlange)
 
    // Geschwindigkeitsregler
    Sleep(10);
}


!! Hinweise / Probleme !!
  • Man sollte niemals das Automatische Schließen der Konsole, durch ein einfaches getch() / getche() / getchar() am Ende lösen. Dies funktioniert zwar in vielen Fällen - aber eben nur in vielen und nicht in allen. Eine Lösung die immer funktionieren sollte, findet man ebenfalls in der Konsolen-FAQ unter "Automatisches Schließen verhindern".

  • Zweitens gibt es Tasten bzw. auch Tastenkombinationen, denen kein Ascii-/Ansi-Code zugewiesen wurde (berühmtestes Beispiel hierfür sind wohl die Pfeiltaste ). Die oben genannten Funktionen geben in solchen Fällen Sondercodes zurück. Mehr zu diesem Thema finden sie unter "Einlesen von Pfeiltasten und Tastenkombinationen"


MfG SideWinder

PS: Wenn ihr Fehler findet, meldet euch bitte umgehend.

_________________
http://www.dilbert.com/2009-06-11/
http://www.dilbert.com/2009-06-14/


Zuletzt bearbeitet von SideWinder am 08:39:55 23.07.2007, insgesamt 1-mal bearbeitet
Werbeunterbrechung
C++ Forum :: FAQ - DOS und Win32-Konsole ::  getch(), getche(), kbhit(), getchar()   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.