Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch für Linux, Unix und Windows
– 2., aktualisierte und erweiterte Auflage 2006
Buch: C von A bis Z

C von A bis Z
1.116 S., mit CD, Referenzkarte, 39,90 Euro
Galileo Computing
ISBN 3-89842-643-2
gp Kapitel 5 Formatierte Eingabe mit scanf()
  gp 5.1 Der Adressoperator »&«
  gp 5.2 Probleme und deren Behandlung mit scanf()
    gp 5.2.1 Möglichkeit 1
    gp 5.2.2 Möglichkeit 2
    gp 5.2.3 Möglichkeit 3
  gp 5.3 Format prüfen
  gp 5.4 Zusammenfassung scanf()


Galileo Computing - Zum Seitenanfang

5.3 Format prüfen  toptop

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.

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 5.5   Die Überprüfung des Rückgabewertes von scanf()

 << zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z
C von A bis Z
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-Programmierung


Zum Katalog: C/C++






 C/C++


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Reguläre Ausdrücke






 Reguläre Ausdrücke


Zum Katalog: Linux






 Linux


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de