PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Falsche Eingabe vermeiden



themaddin
29.10.2006, 17:37
Hi!

Es hat zwar jetzt nichts mit MCs zu tun, aber ich poste es trotzdem mal hier. Es handelt sich ja immerhin um ANSI-C.

Ich habe nämlich folgendes Programm:


#include <stdio.h>

int main(void)
{
int r=0, zahl=9;
while(r==0)
{
printf("Geben Sie eine Zahl ein: ");
r = scanf("%i",&zahl);
}
return 0;
}


Ich möchte jetzt, dass wenn ein Buchstabe oder irgendwas anderes als eine Integer-Zahl eingegeben wird, dass die Aufforderung eine Zahl einzugeben nochmal kommt.
Gebe ich eine ganze Zahl ein beendet das Programm einfach. Das ist soweit ok.
Gebe ich jetzt irgendeinen Buchstaben ein, gibt er mir in einer Endlosschleife den Text vom printf-Befehl aus und überspringt irgendwie immer den scanf-Befehl.

Was läuft da falsch?
Ausführen, programmieren, compilieren lasse ich das ganze mit MS Visual C++.

MfG
Martin

SprinterSB
30.10.2006, 17:15
-1- Du liest einen String ein mit scanf ("%s... oder getline
-2- Du scanst den String, ob es eine Zahl ist. Z.B mit sscanf.

Das Problem bei dir ist wohl, daß bei fehlerhafter Eingabe die Zeichen nicht aus dem Eingabestrom entfernt werden. r ist ja auch 0.

themaddin
30.10.2006, 17:54
Hallo!

Vielen Dank für deine Antwort. Das Problem hat sich mittlerweile gelöst.

Habe erfahren, dass das Problem war, wenn ich einen String eingegeben habe bleibt die Fehlerhafte Eingabe im Puffer und man muss sie manuell entfernen. Habe mir schon sowas gedacht. Ich habe jetzt folgendes benutzt:
fflush(stdin);

Damit geht es.
Programm sieht jetzt so aus:

int main(void)
{
int r=0, zahl=9;
while(r==0)
{
printf("Geben Sie eine Zahl ein: ");
r = scanf("%i",&zahl);
fflush(stdin);
}
return 0;
}

MfG
Martin