Bei der Eingabe nur Zahlen zulassen

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
forumnewbie
Beiträge: 80
Registriert: Di Jan 15, 2013 9:02 pm

Bei der Eingabe nur Zahlen zulassen

Beitrag von forumnewbie » Sa Mär 15, 2014 6:22 pm

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Bei der Eingabe nur Zahlen zulassen

Beitrag von Xin » Sa Mär 15, 2014 6:37 pm

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...
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

forumnewbie
Beiträge: 80
Registriert: Di Jan 15, 2013 9:02 pm

Re: Bei der Eingabe nur Zahlen zulassen

Beitrag von forumnewbie » Sa Mär 15, 2014 7:16 pm

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

Antworten