![]() |
Falsche Eingaben abfangen (c)
hallo,
habe eine frage bezüglich abfangen falscher usereingaben mein proggi soll nur einige berechnungen zu würfel durchführen es funktioniert auch schon (wenn der user alles richtig eingibt) mein problem liegt jetzt noch bei der usereingabe wenn man nämlich statt einer zahl einen buchstaben eingibt hängt sich das proggi auf wie kann ich nun den user zur erneuten eingabe auffordern wenn ein buchstabe oder sonderzeichen eingegeben wurde? danke lg s@ndy ********************************************** int einlesen() { int v_seite_1_a, v_seite_1_b, v_seite_1_c, v_seite_2_a, v_seite_2_b, v_seite_2_c; printf ("\nBitte geben sie die 1 Seite der 1 Schachtel ein: "); scanf ("%u", &v_seite_1_a); printf ("\nBitte geben sie die 2 Seite der 1 Schachtel ein: "); scanf ("%u", &v_seite_1_b); printf ("\nBitte geben sie die 3 Seite der 1 Schachtel ein: "); scanf ("%u", &v_seite_1_c); printf ("\nBitte geben sie die 1 Seite der 2 Schachtel ein: "); scanf ("%u", &v_seite_2_a); printf ("\nBitte geben sie die 2 Seite der 2 Schachtel ein: "); scanf ("%u", &v_seite_2_b); printf ("\nBitte geben sie die 3 Seite der 2 Schachtel ein: "); scanf ("%u", &v_seite_2_c); ordnen (v_seite_1_a, v_seite_1_b, v_seite_1_c, v_seite_2_a, v_seite_2_b, v_seite_2_c); } |
mit scanf kannst du definitv nix abfangen daß ist in c leider so
aber wenn du die zeichen mit getch() einliest dann kannst du den wert speichern auswerten ob er gültig ist und zu einer wiederholten eingabe auffordern |
wieso nicht mit einer normalen "if-Abfrage"?
if (v_seite_1_c != 1 || 2....) { printf("Error"); exit (0); } else ordnen (v_seite_1_a, v_seite_1_b, v_seite_1_c, v_seite_2_a, v_seite_2_b, v_seite_2_c); |
@Stona:
sehr elegant... und es sollte auch nicht funktionieren Das Problem is die Umwandlung von dem Zeichen (bsp.: A) in unsigned, ich habe das jetzt ausgetestet welche Zahlen das ergibt, und es ist fix nicht richtig. BSP: ich geb A ein und herauskommt 4246062 od so irgendwas, wenns ichs dann mit printf ausgeben lassen. Eine weitere möglichkeit ist dass es am Return liegt, womit scanf beendet wird. Aber ich bin jetzt zu müde um mir da jetzt weiter den kopf zu zerbrechen... :o PredeX |
könntest du vielleicht mal den ganzen code posten, ich möcht ma das nur mal als ein ganzes ansehen... vielleicht bringt mich das auf eine idee... wer weiß...
PredeX PS: irgenwie lässt mich das nicht in ruh ;) |
Code
sicher kann ich den ganzen code posten...
glaubt ihr geht es mit ascii_seite_a = toascii (seite_a); aber wie macht man das wenn man eine zweistellige zahl eingeibt? :-( danke lg s@andy ps. code hängt dran - rein kopieren würde über die max. länge raus gehen... |
Wenn du das ganze mit atoi(=alphanumerische zu Int) dann müsstes du das ganze mit einer while/for schleife realisieren, wobei das
abbruchskriterium die Eingabe von der return-taste ist, glaub ich... Bsp Code:
int input() Aja und getestet hab ichs auch ned, kann also sehr fehlerhaft sein, wenn ich was übersehen hab :D PredeX |
Es geht doch - sogar einfach
Hallo,
hab ein wenig herum gesucht im netz und meine bücher durchsucht und bin jetzt auf nen grünen zweig gekommen es funktioniert eigentlich ganz einfach *G* do { flushall(); printf ("\nBitte geben sie die 1 Seite der 1 Schachtel ein: "); v_stat = scanf ("%f", &v_seite_1_a); p_seite_1_a = v_seite_1_a; if (v_stat != 1 || v_seite_1_a <= 0.0) { printf ("Ungültige Eingabe...(Komma muss . sein!)\n"); } } while (v_stat != 1 || v_seite_1_a <= 0.0); könnt mir vielleicht noch jemand erklären warum bei float eingabe ein 9,9 (also mit , nicht mit .) erlaubt ist und bei 0,5 regt er sich auf da muss man 0.5 eingeben??!!?? das hab ich net verstanden lg S@ndy :) ps. langsam wirds was mitn programmieren in c und cpp und es macht mir immer mehr spaß (ich meine c / cpp programmierung - in der arbeit programmier ich eh tag täglich mit ner andren sprache ) |
kleiner Fehler
[edit]: vergesst dieses Post, skippt weiter zum nächsten...
[edit2]: vergesst es doch nicht ganz, denn der source erklärt so ungefähr wie atoi anscheinend funzt. Sollte das sandy nicht interessieren, dann ließ nach dem Sourcecode weiter... Code:
int input() Also deine Abfrage schließt jetzt aus dass die Float bzw double Zahlen falsch eingegeben wurden, während meine nicht mit float bzw. double Zahlen umgehen kann sondern nur mit int werten. Meine Variante schließt -so glaub ichs zumindestens- schließt die eingabe von Zahlen, die verschieden von 0-9 sind mit Sicherheit aus und bricht ab. PredeX |
Und jetzt bin ich grad draufkommen dass es noch viel leichter geht und ich wieder mal viel zu kompliziert gedacht habe...
wenn du den Eingabestring einfach mit atoi oder atof (alphanumeric to float) umwandelst kann dir die user eingabe eingentlich egal sein, denn atof wandelt folgenden string " -123.1AVD" in die Zahl -123.1 um. auch atoi wandelt einen String " +123tEg" in +123 um. eigentlich ganz praktisch... Wennst jetzt trotzdem den user daraufhinweisen willst dass er eine falsche eingabe getätigt hat dann weist du ihn einfach mit einer if abfrage Code:
if(eingabe[index]<'0' && eingabe[index]<'9') PredeX |
Alle Zeitangaben in WEZ +2. Es ist jetzt 05:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag