5.3 Format prüfen
 
Um sicher zu gehen, dass der Benutzer auch das Richtige eingegeben hat, können (müssen) Sie den Rückgabewert von scanf() überprüfen:
/* scanf6.c */
#include <stdio.h>
int main(void) {
char a;
int b,check;
printf("Bitte Eingabe machen (Zeichen/Zahl): ");
check=scanf("%c %d",&a,&b);
printf("Check = %d \n",check);
return 0;
}
Der Rückgabewert von scanf() ist dabei immer die Anzahl der erfolgreich gelesenen Werte. In diesem Beispiel erwartet scanf() die Eingabe eines Zeichens (%c) und einer Dezimalzahl (%d). Wenn die Eingabe richtig gemacht wurde, sollte die folgende printf()-Anweisung den Wert »2« ausgeben.
Mit einer kleinen Überprüfung können Sie das Programm verbessern, um ein undefiniertes Verhalten für die Weiterarbeit zu verhindern:
/* scanf7.c */
#include <stdio.h>
int main(void) {
int a,b,check;
printf("Bitte zwei Zahlen eingeben: ");
check=scanf("%d %d",&a,&b);
fflush(stdin); /* Unter Linux entfernen */
//getchar(); /* für Linux */
/* Bei check ist gleich 2 war die Eingabe richtig */
if(check==2)
printf("Beide Zahlen richtig %d und %d\n",a,b);
/* ... nicht richtig, also war die 2. Zahl falsch */
else if(check==1) {
printf("Die 2.Zahl hat das falsche Format!!\n");
printf("Bitte Eingabe wiederholen: ");
/* noch ein Versuch */
check=scanf("%d",&b);
fflush(stdin);
if(check)
printf("Eingabe Ok. Ihre Zahlen %d %d\n",a,b);
else
printf("Leider nochmals falsch\n");
}
else
printf("Die erste oder beide Eingaben waren falsch!\n");
return 0;
}
Bei fehlerfreier Ausführung liefert die scanf()-Funktion die Anzahl der Zeichen zurück, die erfolgreich gelesen, konvertiert und gespeichert wurden.
Wenn die erste Eingabe von scanf() schon fehlerhaft ist, wird die zweite Eingabe gar nicht mehr beachtet. Daher gibt scanf() dann 0 zurück, da gar keine Zeichen gespeichert werden konnten.
 Hier klicken, um das Bild zu Vergrößern
Abbildung 5.5
Die Überprüfung des Rückgabewertes von scanf()
|