falsche Eingabe bei scanf()



  • Also, wie schon in anderen unterforen erzählt arbeite ich mich studienbedingt in C ein und dabei beschäftige ich mich auch mit scanf. Scanf hat ja einen Rückgabewert. Soweit ich das rausgefunden habe ist dieser Entweder 0 oder 1 oder EOF. über null und eins kann man rausfinden, ob die Eingabe verarbeitet wurde oder nicht. Getestet habe ich das, indem ich einen Buchstaben eingegeben habe, wo ich eigentlich eine Zahl verarbeiten wollte. Fraglich ist für mich nun wann EOF zurück gegeben wird. In der MSDN steht: wenn eine Error erfolt. Aber was ist ein Error?

    Und die nächste Frage: Wie bekomme ich es hin, dass er bei einer Falscheingabe nicht gleich abstürzt, sondern den Speicher lehrt und dann weitermacht. Wie leert man diesen Zwischenspeicher, oder kann man das nicht?



  • man: scanf gibt zurück, wieviele der übergebenen Parameter ordnungsgemäß gefüllt worden sind (kann auch größer als 1 werden). 0 bedeutet, daß schon der erste Wert nicht zugewiesen werden konnte (z.B. "%d" mit einem Buchstaben), EOF daß dir gerade die Eingabedatei abgestürzt ist (dürfte bei fscanf() passieren, wenn du am Dateiende ankommst).

    Zu deiner zweiten Frage: Was für einen Zwischenspeicher meinst du? Bei einem Fehler wird dir üblicherweise gar nichts in die Rückgabevariablen geschrieben.



  • Also zu meinem Problem: Wenn ich mehrere Eingaben nacheinander machen möchte und bei der ersten einen Buchstaben eingebe wo eine Zahl erwartet wird, dann fragt er mich nicht mehr nach den anderen, sondern rattert einfach alles durch und beendet das programm....



  • setz das nach ein scanf:

    while (getchar() != '\n');
    

    damit wird die eingabe von eventuell noch vorhandenen zeichen befreit. wundere dich nicht, dass nach dem while ein semikolon und keine {} stehen. das ist korrektes c.



  • Das ist nicht nur korrektes C, das ist auch in anderen Programmiersprachen so 🙂 Von PHP kenne ich das schon 😉

    Danke für die Antwort. Es funktioniert einwandfrei.


Anmelden zum Antworten