Also ich schreibe gerade ein Programm für einen 8051er. In diesem wird z.B ein Zahlenwert von der Console(RS232) eingelesen. Dieser muss weiterverarbeitet werden. Jetzt zum Problem, das atoi liefert ja keine Rückmeldung, wenn etwas schiefläut. Wie kann ich einfach, ohne die Funktion strtol, das Programm robust gegen Falscheingaben machen? Mit fällt gerade nix ein, außer über das char* zu loopen und dann testen, welchen Wert es in Ascii hat. Hat der aktuelle Index einen anderen Wert als Dezimal 48 - 57 (gültiger Charinput: 0-9) dann verwerfen. Gibt es eine einfachere Möglichkeit? Die Eingabe kommt von inputse(). MfG Bastian
Gast
#5019616
Bastian N. schrieb: > welchen Wert es in Ascii hat. dafür gibt es in c "isdigit()" Wenn die Zahl nicht 0 sein kann kannst du einfach auf 0 testen. Bei nichtnumerischen Strings liefert atoi() 0 zurück
Der Andere schrieb: > Bastian N. schrieb: >> welchen Wert es in Ascii hat. > > dafür gibt es in c "isdigit()" > Wenn die Zahl nicht 0 sein kann kannst du einfach auf 0 testen. Bei > nichtnumerischen Strings liefert atoi() 0 zurück Leider gibt es isdigigt beim Wickenhäuser wohl nicht - mal wieder:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
Danke dir trotzdem. Muss nächstes mal wieder dazuschreiben das ich Wickenhäuser IDE benutze. Hab jetzt das selbst implementiert:
1 | |
2 | |
3 | |
4 | |
Wgn atoi: Das liefert beim Wickenhäuser nicht immer (bei Falscheingabe) eine zurück - z.B bei 4f - habe ich getestet:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
MfG Bastian Und @Moderator bin zufällig auf den Meldeknopf gekommen, weil nicht richtig gelesen - sorry.
Bastian N. schrieb: > Jetzt zum Problem, das atoi liefert ja keine Rückmeldung, wenn etwas > schiefläut. Dafür gibt's normalerweise strtol(), aber mir schwant, dass deine leicht eingeschränkte Arbeitsumgebung auch dieses mal wieder bloß nicht kennen wird. :/
Gast
#5019672
Bastian N. schrieb: > if((input < 48) || (input > 57)) Du kannst auch schreiben if((input < '0') || (input > '9')) das ist meiner meinung nach verständlicher Siehe auch deine gepostete atoi() funktion dort wirds auch so gemacht.
Der Andere schrieb: > Bei > nichtnumerischen Strings liefert atoi() 0 zurück nein, bei "1234x" liefert 1234
Was ich noch sagen wollte, habe gestern ja mich mit atoi rumgequält, weil es einfach irgendeinen Wert z.B. bei 4f zurück geliefert hat. Jetzt habe ich es nochmal Vanilla probiert und atoi verhält sich wie beschrieben. Leider habe ich den alten Code nicht mehr, da verworfen. Vielleicht hatte ich irgendein Speicherproblem verursacht (Bufferunder/overflow) wer weiß. Aber da war auf atoi kein Verlass. Kann es gerade aber leider nicht mehr nachstellen. Thema ist aber hiermit erledigt :)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.