scanf
-
wie kann ich kontrollieren ob der benutzer auch nur zahlen eingibt (und keine buchstaben), wenn ich ein scanf("%d", &var); mache?
mein programm braucht integerwerte um weiterzuarbeiten.
ich hoffe mir kann jemand helfen
-
frager schrieb:
wie kann ich kontrollieren ob der benutzer auch nur zahlen eingibt (und keine buchstaben), wenn ich ein scanf("%d", &var); mache?
mein programm braucht integerwerte um weiterzuarbeiten.
ich hoffe mir kann jemand helfen
Auf den return Wert prüfen, der gibt an wie viele Variablen erfolgreich gelesen werden konnten:
int i=0, res=0; res = scanf("%d", &i); if (res != 1) //uh oh, fehlerhafte Eingabe fprintf(stderr, "Falsche Eingabe");
MfG
GPC
-
wie kann ich es nun schaffen, dass der user so lange nach der eingabe gefragt wird, bis er eine zahl eingibt?
wenn ich es so mache klappt es nicht
#include <stdio.h> int main() { int i, res = 0; while(res != 1) res = scanf("%d", &i); printf("%d", &i); return 0; }
-
Dein Problem wird sein, dass sich noch Zeichen im Eingabepuffer befinden. Diese Zeichen werden von scanf() gelesen,
was dazu führt, dass scanf() in deinem Fall 0 zurückgibt und somit eine Endlosschleife entsteht.Mit einer while-Schleife lassen sich diese Zeichen entfernen:
while((c=getchar())!='\n'&&c!=EOF);
#include <stdio.h> int main() { int i, res = 0; int c; while(res != 1) { res = scanf("%d", &i); while((c=getchar())!='\n'&&c!=EOF); } printf("%d", &i); //der Adressoperator muss entfernt werden return 0; }
Allerdings wäre meiner Meinung nach eine do-while Schleife in dieser Situation geeigneter.
:schland: