Suche
Suche Menü

Tastatureingaben

Programme schreiben macht erst dann richtig Sinn, wenn der Mensch es steuern kann. Hier lernen wir nun, wie der Benutzer Daten in unser Programm eingeben kann.

Einzelnes Zeichen einlesen

Einzelne Zeichen einzulesen ist die einfachste Methode für eine Eingabe in ein Programm. Mit dem Befehl getchar wird das Programm angehalten und läuft erst weiter, wenn der Benutzer eine Taste drückt. Das eingelesene Zeichen wird in einer char Variable gespeichert.

char c;
printf("Mit welchem Buchstaben beginnt ihr Vorname? ");
c = getchar();
printf("\nIch weiss jetzt, dass Ihr Vorname mit '%c' beginnt.\n", c);

Mit welchem Buchstaben beginnt ihr Vorname? K

Ich weiss jetzt, dass Ihr Vorname mit 'K' beginnt.

Zahlen einlesen

Für Eingaben, die länger als ein Zeichen sind, verwenden wir den scanf Befehl. Wie beim printf Befehl geben wir in den Hochkommas eine Formatanweisung für den einzulesenden Datentyp an. Schreiben wir zusätzlich noch Text zu den Formatanweisungen, muss dieses Format auch genau so vom Benutzer eingegeben werden. Nach dem Komma folgen die Variablen, in welche die Eingaben gespeichert werden sollen – mit dem Unterschied, dass vor den Variablennamen ein Kaufmanns-Und & geschrieben wird. Was es damit auf sich hat erfahren wir später.

In diesem Programmbeispiel wird lediglich eine Zahl ohne besondere Eingabeformatierung eingelesen.

int alter;
printf("Wie alt sind sie? ");
scanf("%d", &alter);
printf("\nIn %d Jahren sind Sie 100!\n", 100-alter);

Wie alt sind sie? 33

In 67 Jahren sind Sie 100!

Einlesen mit Eingabeformatierung

Für manche Zwecke ist es sinnvoll, die einzugebenden Information in einem bestimmten Format zu "erzwingen". Für ein Datum wäre z.B. "Tag.Monat.Jahr" angebracht. Dies entspricht drei Zahlen, welche durch Punkte voneinander getrennt sind. Eine gültige Eingabe wäre "2.5.1980", eine ungültige "2 5 1980".

int tag, monat, jahr;
printf("Bitte geben Sie ihr Geburtsdatum ein [TT.MM.JJJJ]: ");
scanf("%d.%d.%d", &tag, &monat, &jahr);
printf("\nIhr internationales Geburtsdatum: %04d-%02d-%02d\n", jahr, monat, tag);

Bitte geben Sie ihr Geburtsdatum ein [TT.MM.JJJJ]: 11.12.1980

Ihr internationales Geburtsdatum: 1980-12-11

Andere Datentypen einlesen

Analog zur Ausgabe verwenden wir beim Einlesen die gleichen Formatierungstypen. Mit %c lesen wir ein Zeichen ein, mit %f eine Kommazahl.

Eingabe ENTER im Tastaturpuffer

Alle Eingaben die wir machen landen zuerst im Tastaturpuffer, bevor die Zeichen von unserem Programm verarbeitet werden. Da wir unsere Eingaben mit der ENTER-Taste bestätigen müssen, landet auch dieses Zeichen im Puffer, was im folgenden Fall unerwünscht ist:

char a, b;

printf("\nGeben sie ein Zeichen ein: ");
a = getchar();

printf("\nGeben sie ein Zeichen ein: ");
b = getchar();

printf("Die ASCII-Codes ihrer Zeichen sind %d und %d\n", a, b);

Geben sie ein Zeichen ein: a
Geben sie ein Zeichen ein: 
Die ASCII-Codes ihrer Zeichen sind 97 und 10

Wie wir sehen, kommen wir gar nicht zum Eingeben eines zweiten Zeichens. Der Tastaturpuffer wird bei der ersten Eingabe mit zwei Zeichen gefüllt, a und ENTER. Das Zeichen ENTER wird mit ASCII-Code 10 (Line Feed lf) wiedergegeben. Um das Problem zu umgehen, ist es möglich die Eingabe ENTER in einer zweiten Variable abzufangen, sodass der Tastaturpuffer geleert wird.

char a, b, temp;

printf("\nGeben sie ein Zeichen ein: ");
scanf("%c%c", &a, &temp);

printf("\nGeben sie ein Zeichen ein: ");
scanf("%c%c", &b, &temp);

printf("\nDie ASCII-Codes ihrer Zeichen sind %d und %d\n", a, b);

Geben sie ein Zeichen ein: a
Geben sie ein Zeichen ein: b
Die ASCII-Codes ihrer Zeichen sind 97 und 98