Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

2.4 Die Funktion scanf()

2.4 Die Funktion scanf()

Diese Funktion ließt Werte für Variablen von der Tastatur ein und benutzt auch einen Formatstring. Man übergibt ihr aber nicht den Wert einer Variable, sondern die Adresse im RAM/Arbeitsspeicher wo die Variable steht, also die Angabe wo die Tastatur den Wert hin tun soll. Stellen Sie sich das so vor. Ich erwähnte bereits die Metapher der Kochtöpfe. Wenn also jemand für Sie Wasser in einen Topf füllen soll, dann bringt es nichts, diesem jemanden den leeren Inhalt des Topfes zu geben, sondern sie müssen auf den Topf zeigen oder der Person den Topf in die Hand drücken. Erst dann weiß derjenige, wo er Wasser einfüllen soll und deswegen übergibt man nicht den Wert der Variable, sondern die Position.

Referenz einer Variable

Doch wie kommt man jetzt an die Adresse bzw. Referenz einer Variable heran? Dies geschieht mittels des "&" Operators. Wenn man wissen will, welche Herdplatte an ist, dann schaut man sich die Knöpfe an und sieht anhand des kleinen Bildchens, welche Platten beheizt werden. Wenn man nun in diesem Bildchen das ganze einkreist, erhält man eine Art Kaufmanns-Und. Dies können Sie sich als Eselsbrücke merken, wenn es darum geht, nicht den Wert einer Variable zu übergeben, sondern ihre Position.

Das Schema sieht so aus: scanf(<Formatstring>, &<Variable>[, &<Variable> ...])

Nun ergibt sich da noch eine kleine Schwierigkeit. Die Tastatur hat einen Puffer, in dem alle Sachen abgelegt werden, die man auf der Tastatur drückt. Dies betrifft nicht nur Zahlen und Buchstaben, sondern auch die ENTER Taste. Liest man Zahlen ein, stört dies nicht weiter, da das ENTER zunächst mit eingelesen, aber nicht mit interpretiert wird. Wenn aber ein einzelnes Zeichen eingelesen werden soll, dann verbleibt das ENTER im Puffer und wenn anschließend noch ein Zeichen eingelesen werden soll, wird dieses verbleibende ENTER genommen und der Benutzer wird nach keiner erneuten Eingabe gefragt. Aus diesem Grund gibt es Funktionen, mit welchen Sie den Tastaturpuffer leeren können und jene sollten Sie immer aufrufen, bevor Sie ein einzelnes Zeichen oder Zeichenketten einlesen wollen. Wie dies aussehen könnte, sehen Sie in folgendem Beispiel.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
					
int  iZahl;
char cZeichen;

// Wartet bis der Anwender eine natürliche Zahl eingegeben hat
// und ENTER gedrückt hat
scanf("%i", &iZahl);

// Tastaturpuffer leeren
fflush(stdin);
// Wartet bis Anwender eine Zahl oder Buchstaben eingegeben hat
// und ENTER gedrückt hat
scanf("%c", &cZeichen);
					
Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012