![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Jr. Member
![]() Registriert seit: 09.05.2002
Alter: 44
Beiträge: 46
|
![]() 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); } |
![]() |
![]() |
![]() |
#2 |
Inventar
![]() |
![]() 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
____________________________________
//---< wizo >---\\\\ |
![]() |
![]() |
![]() |
#3 |
Inventar
![]() Registriert seit: 28.09.2001
Beiträge: 2.179
|
![]() 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); |
![]() |
![]() |
![]() |
#4 |
Senior Member
![]() Registriert seit: 03.09.2001
Alter: 41
Beiträge: 165
|
![]() @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... ![]() PredeX
____________________________________
There are 10 types of people, those who understand binary and those who don\'t... Ask Me No Questions, And I Tell You No Lies! |
![]() |
![]() |
![]() |
#5 |
Senior Member
![]() Registriert seit: 03.09.2001
Alter: 41
Beiträge: 165
|
![]() 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 ![]()
____________________________________
There are 10 types of people, those who understand binary and those who don\'t... Ask Me No Questions, And I Tell You No Lies! |
![]() |
![]() |
![]() |
#6 |
Jr. Member
![]() Registriert seit: 09.05.2002
Alter: 44
Beiträge: 46
|
![]() 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... |
![]() |
![]() |
![]() |
#7 |
Senior Member
![]() Registriert seit: 03.09.2001
Alter: 41
Beiträge: 165
|
![]() 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() { char char_Eingabe[]; int int_Eingabe[]; int index, zahl; for(index=0; index<=10; ++index) { char_Eingabe[index]=getche(); if(char_Eingabe[index]>='0' && char_Eingabe[index]<='9') { int_Eingabe[index]=atoi(char_Eingabe[index]); }//end if else if(char_Eingabe[index]=13) //13=Return Taste break; else { error_code=1; break; }//end else }//end for() if(error_code!=1) { zahl=input2zahl(int_eingabe[],strlen(int_eingabe[])-3); } else /*Hier muss man sich jetzt noch was sinnvolles überlegen, sodass dann das gesamte Programm entweder neustartet od. überhaupt beendet wird. Das einfachste wäre vielleicht mit exit, wodurch das Programm einfach abgebrochen wird... *Correct me if if i'm wrong* */ return zahl; } int input2zahl(string[],length) //wenns mit string[] ned funzt, probiers mal mit einem Pointer { int index; int zahl=0; int exp=length; for(index=0;index<=length;++index,--exp) { number=string[index] zahl= (int)(zahl + pow((double)number,(double)exp)); //fuer pow() brauchst du math.h, pow(double x, double y)=> x^y } return zahl; } Aja und getestet hab ichs auch ned, kann also sehr fehlerhaft sein, wenn ich was übersehen hab ![]() PredeX
____________________________________
There are 10 types of people, those who understand binary and those who don\'t... Ask Me No Questions, And I Tell You No Lies! |
![]() |
![]() |
![]() |
#8 |
Jr. Member
![]() Registriert seit: 09.05.2002
Alter: 44
Beiträge: 46
|
![]() 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 ) |
![]() |
![]() |
![]() |
#9 |
Senior Member
![]() Registriert seit: 03.09.2001
Alter: 41
Beiträge: 165
|
![]() [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() { char char_Eingabe[]; int int_Eingabe[]; int index, zahl; for(index=0; index<=10; ++index) { char_Eingabe[index]=getche(); if(char_Eingabe[index]>='0' && char_Eingabe[index]<='9') { int_Eingabe[index]=atoi(char_Eingabe[index]); }//end if else if(char_Eingabe[index]=13) //13=Return Taste break; else { error_code=1; break; }//end else }//end for() if(error_code!=1) { zahl=input2zahl(int_eingabe[],strlen(int_eingabe[])-3); } else /*Hier muss man sich jetzt noch was sinnvolles überlegen, sodass dann das gesamte Programm entweder neustartet od. überhaupt beendet wird. Das einfachste wäre vielleicht mit exit, wodurch das Programm einfach abgebrochen wird... *Correct me if if i'm wrong* */ return zahl; } int input2zahl(string[],length) //wenns mit string[] ned funzt, probiers mal mit einem Pointer { int index; int zahl=0; int exp=length; for(index=0;index<=length;++index,--exp) { number=string[index] zahl= (int)(zahl + number*(pow(10.0,(double)exp));//<--hier war ein Fehler //fuer pow() brauchst du math.h, pow(double x, double y)=> x^y } return zahl; } 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
____________________________________
There are 10 types of people, those who understand binary and those who don\'t... Ask Me No Questions, And I Tell You No Lies! |
![]() |
![]() |
![]() |
#10 |
Senior Member
![]() Registriert seit: 03.09.2001
Alter: 41
Beiträge: 165
|
![]() 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') printf("Das %d.Zeichen der Eingae ist %c und somit kein numerischer Wert!", index+1, eingabe[index]); else zahl=atof(eingabe); PredeX
____________________________________
There are 10 types of people, those who understand binary and those who don\'t... Ask Me No Questions, And I Tell You No Lies! |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|