Du möchtest wissen, was der getchar Befehl in C bedeutet? Hier erklären wir dir, wie du ihn verwenden kannst und noch weitere Funktionen, um Zeichen einzulesen.
Inhaltsübersicht
Getchar C und Rückgabewert
Die bekannteste und auch am meisten genutzte Funktion für Eingaben über die Tastatur, ist die getchar Funktion. Im Gegensatz zu printf ist sie allerdings nur in der Lage, einzelne Zeichen einzulesen. Das ist aber kein Problem, solange man weiß, wie man Schleifen verwendet. Denn mit ihnen lässt sich die getchar ganz einfach wiederholen, bis die ganze Zeichenkette eingelesen ist. Solltest du noch nicht wissen, wie du Funktionen dieser Art verwendest, findest du hier eine Anleitung zu den while- und for-Schleifen.
Hast du die getchar-Funktion erfolgreich verwendet, so gibt sie dir einen Rückgabewert vom Typ unsigned char zurück, der aber auch per Typecast in einen int-Wert umgewandelt werden kann. Ist der eingegebene Wert kein ASCII-Zeichen oder schlägt beim Ausführen der Funktion etwas fehl, erhältst du einen EOF-Fehler. Es werden aber auch noch andere Methoden für das Einlesen von Zeichen verwendet. Sie sind zwar weniger verbreitet, aber du solltest sie wenigstens einmal gesehen haben und wissen, was sie tun.
Alternative Einlesemethoden: getc
Die erste dieser Alternativen ist die getc Funktion. Sie liest, wie die getchar Funktion ein einzelnes Zeichen eines Inputstreams aus. Bei Erfolg wird der ASCII-Wert als int, bei Fehlschlag EOF ausgegeben.
Der Parameter, den wir hier angeben, heißt Standard-Input und steht – wie der Name bereits vermuten lässt – für den Standard-Inputstream.
Doch was ist jetzt der Unterschied zwischen den beiden Funktionen? Das ist schnell erklärt, denn die Beiden unterscheiden sich durch ihre Informations-Bezugs-Möglichkeiten. Während die getchar Funktion nur Daten vom Standard-Input einlesen kann, ist die getc Funktion in der Lage, das mit einem beliebigen Input-Stream zu tun.
Studyflix vernetzt: Hier ein Video aus einem anderen Bereich
getch und getche Funktionen
Zusätzlich zu diesen beiden Funktionen gibt es aber noch zwei andere: Die getch und die getche Funktion. Sie sind im Gegensatz zu getchar und getc keine Standard-Funktionen. Sie stehen daher nicht in der stdio-Bibliothek, sondern in conio.h. Conio steht für Console-Input-Output und ist eine veraltete Header-Datei.
Die getch wird meist von MS-DOS-Compilern wie z.B. Turbo C verwendet. Deswegen findet sie auch seltener bis gar keine Anwendung mehr. Das liegt daran, dass MS-DOS, oder auch Microsoft-Disk-Operating-System ein Ein-Nutzer, Single-Task Betriebssystem ist, das vor der Veröffentlichung von Windows 95 ein standalone Betriebssystem war. Heute ist es nur noch in der Windows-Kommandozeile integriert.
Damit ist diese Funktion allerdings auch nicht durch POSIX definiert. Das wirft neue Probleme auf. Denn POSIX ist ein Standard, der gewährleistet, dass der geschriebene Code auf allen Betriebssystemen funktioniert. Da die getch Funktion nicht durch POSIX unterstützt wird, läuft ein Programm mit einer solchen Funktion nativ nur auf Windows.
In ihrer eigentlichen Funktion unterscheidet sie sich allerdings nicht besonders von der getchar oder der getc Funktion, denn auch sie liest einzelne Zeichen von der Tastatur ein. Allerdings benutzt sie dazu keinen Buffer. Bei einem Buffer handelt es sich um einen temporären Speicher, der Daten zwischenlagert. Dass kein Buffer genutzt wird, hat zur Folge, dass jedes Zeichen sofort eingelesen wird, ohne zuvor auf die Bestätigung durch die Entertaste zu warten. Damit funktioniert die Eingabe von ASCII-Zeichen mit getch genauso wie in einem Texteditor.
Schauen wir uns jetzt noch die getche Funktion an. Auch sie ist keine Standard-Funktion, sondern stammt aus conio.h. Sie funktioniert genauso wie getch , gibt jedoch das eingelesene Zeichen bereits vor Programmende aus.
So, jetzt kannst du nicht nur alte Programme lesen, sondern auch neue, kompliziertere erstellen.
Die getchar()-Funktion — häufigste Fragen
(ausklappen)
Die getchar()-Funktion — häufigste Fragen
(ausklappen)-
Warum verwendet man getchar statt scanf?
getcharverwendet man stattscanf, wenn man Eingaben wirklich zeichenweise verarbeiten soll, weilgetchargenau ein Zeichen pro Aufruf liefert und man den Lesevorgang in einer Schleife leicht kontrollieren kann.scanfarbeitet formatgesteuert und ist eher auf das Einlesen ganzer Zahlen, Wörter oder formatierten Text ausgelegt. -
Was ist der Unterschied zwischen getc und getch?Der Unterschied zwischen
getcundgetchist, dassgetcein Standard-C-Aufruf ist, der ein Zeichen aus einem angegebenen Eingabestrom liest, währendgetchkeine Standard-Funktion ist und typischerweise direkt von der Tastatur liest.getcharbeitet dabei meist ohne Puffer und reagiert deshalb sofort ohne Enter. -
Warum muss man bei getchar oft erst Enter drücken, bevor ein Zeichen eingelesen wird?Bei
getcharmuss man oft erst Enter drücken, weil die Tastatureingabe in vielen Konsolen zeilenweise gepuffert wird. Dabei sammelt das System die getippten Zeichen zunächst in einem Puffer (Zwischenspeicher) und gibt sie erst nach dem Zeilenende an das Programm weiter, also typischerweise nach Enter. -
Wie prüft man bei getchar richtig auf EOF?Auf
EOFprüft man beigetchar, indem man den Rückgabewert in einerint-Variable speichert und diese Variable mitEOFvergleicht. Ein typisches Muster ist:intc; while ((c =getchar()) !=EOF) { … }.EOFkann in der Konsole zum Beispiel durch [Strg + D] (Unix) oder [Strg + Z] (Windows) ausgelöst werden.
Ein- und Ausgabe verstehen
Die getchar()-Funktion gehört zu den Grundlagen der Ein- und Ausgabe in C. Wer sich mit Ein- und Ausgabe beschäftigt, arbeitet mit Zeichen, Zahlen und ganzen Eingaben aus Programmen und von der Tastatur. Dabei wird klar, wie Programme Daten lesen, speichern und wieder ausgeben. Weitere Videos dazu findest du in unserem Informatikbereich.
