Seite 1 von 1

Bei der Eingabe nur Zahlen zulassen

Verfasst: Sa Mär 15, 2014 6:22 pm
von forumnewbie
Hi,

wie kann ich bei der Eingabe nur (ganze) Zahlen zulassen?
scanf stürzt bei mir sofort ab, wenn ich was falsches eingebe. Also das Programm wird geschlossen und ich kann keine Überprüfung mit Rückgabewerten machen.
Ich kenne noch getchar() und gets(). Damit könnte ich theoretisch die Eingabe als String einlesen und dann eventuell versuchen diese Zeichenkette mit atoi() in ein Integer umzuwandeln. Habt ihr zufällig ein Tutorium dazu gemacht?
Das Programm soll auch solche Eingabe als falsche erkennen: 3a546, oder s2345 und die Eingabe wiederholen. Ich möchte das in C und nicht C++ lösen.

Bevor ich jetzt mehrere Stunden selbst probiere, wollte ich lieber fragen, ob ihr ein paar Tipps für mich habt oder sogar Lösungsvorschläge. Vielleicht gibt es dafür bereit C-Standardfunktionen?

EDIT:
So sieht meine erste Version aus, die noch nicht alles abfängt:
char anz[3];
int anz2;

do{
printf("Anzahl: ");
gets(anz);
}while( (anz2 = atoi(anz)) == 0);
Sie fängt aaa222, aaaaa ab, aber nicht 2a34.

Re: Bei der Eingabe nur Zahlen zulassen

Verfasst: Sa Mär 15, 2014 6:37 pm
von Xin
forumnewbie hat geschrieben:wie kann ich bei der Eingabe nur (ganze) Zahlen zulassen?
scanf stürzt bei mir sofort ab, wenn ich was falsches eingebe. Also das Programm wird geschlossen und ich kann keine Überprüfung mit Rückgabewerten machen.
siehe scanf()

scanf sollte man eigentlich nie benutzen, außer man akzeptiert, dass das Programm bei Fehleingaben merkwürdige Dinge tut.
forumnewbie hat geschrieben:Ich kenne noch getchar() und gets(). Damit könnte ich theoretisch die Eingabe als String einlesen und dann eventuell versuchen diese Zeichenkette mit atoi() in ein Integer umzuwandeln. Habt ihr zufällig ein Tutorium dazu gemacht?
Nein, aber die Funktionen sind beschrieben: getchar(), gets()
forumnewbie hat geschrieben:Das Programm soll auch solche Eingabe als falsche erkennen: 3a546, oder s2345 und die Eingabe wiederholen. Ich möchte das in C und nicht C++ lösen.
Ich rate immer dazu, Eingaben entweder als Parameter anzunehmen.
Später kann man sich mit entsprechenden Libs wie GTK oder NCurses beschäftigen.

PS: Ich sitze seit langem wegen Deiner GTK Frage mal wieder an Windows... seit zwei Stunden fährt die Kiste rauf und runter um Updates einzuspielen...

Re: Bei der Eingabe nur Zahlen zulassen

Verfasst: Sa Mär 15, 2014 7:16 pm
von forumnewbie
Eine Version mit gets() + atoi() habe ich bereits hinbekommen. Siehe mein EDIT oben. Sie fängt aber z.B. 2a4 nicht richtig ab, wandelt aber zumindest richtig um. Und wenn dort ich viel falsch eingebe, läuft das Programm zwar bis zum Schluss ohne Fehler durch und gibt mir alles richtig aus, aber dann erhalte ich unter Linux noch als Anhang "stack smashing detected"-Fehler. Obwohl anscheinend alles richtig funktioniert hatte.
PS: Ich sitze seit langem wegen Deiner GTK Frage mal wieder an Windows... seit zwei Stunden fährt die Kiste rauf und runter um Updates einzuspielen...
Ich habe bereits das hingekriegt und die Anleitung dazu geschrieben: http://www.proggen.org/forum/viewtopic.php?f=21&t=5784