Hi, ich habe einen String und möchte diesen mit atof() in Double konvertieren. Wenn das ganze keine Zahl ist, kommt als "Fehlermeldeung" einfach eine 0 in die Double-Variable. Ich möcnhte aber unterscheiden, ob es eine Zahl von 0 bis 100 ist, oder ein andere Buchstabensalat drin steht. Nur mit atof() geht diese Unterscheidung nicht, da bei "0" und einem anderem String eine 0 in die Doublevariable kommt. Wie macht man das?
du könntest es mit strtod versuchen, da bekommt du einen zeiger auf das nächste zeichen nach dem double zurück. Wenn das gleich den start ist dann steht keine double in dem string.
cubbi schrieb: > Wenn das ganze keine Zahl ist, kommt als "Fehlermeldeung" > einfach eine 0 in die Double-Variable. ...und errno wird entsprechend gesetzt. Wenn deine Version das nicht tut, solltest du strtod() oder ein Pendant dafür einsetzen, welche errno setzt.
Wenn der String etwas anderes als Zahlen und ein Punkt oder Komma enthält ist was faul. Nimm eine Schleife und isdigit() (Header musst du selbst nachgucken).
Tom M. schrieb: > ...und errno wird entsprechend gesetzt. wo hast du das her? In der doku konnte ich nichts finden was darauf hindeutet das es irgendwo so gemacht wird.
das verrät mir
1 | man atof |
2 | man strtod |
auf einem BSD System. Könnte natürlich mit einer GNU/... libc anders sein, hab aber gad keine Kiste da, um das zu prüfen. Edit: Ist auch bei der gnu libc so implementiert. Was ich falsch gelesen habe, ist die Sache mit einer erfolglose Konversion. Sie wird mit return value 0 beschenkt, ohne das errno gesetzt würde. Im manual ist aber ersichtlich, wie dieser Fall erkannt werden kann.
c-bastler schrieb: > Wenn der String etwas anderes als Zahlen und ein Punkt oder Komma > enthält ist was faul. Nimm eine Schleife und isdigit() (Header musst du > selbst nachgucken). -3.141e+2 ist auch eine gültiger double Wert.
DirkB schrieb: > c-bastler schrieb: >> Wenn der String etwas anderes als Zahlen und ein Punkt oder Komma >> enthält ist was faul. Nimm eine Schleife und isdigit() (Header musst du >> selbst nachgucken). > > -3.141e+2 ist auch eine gültiger double Wert. Wohingegen -3.14.15e+2 keiner ist. Die Sache mit dem Abprüfen auf Punkt und Digits ist also nur die halbe Miete, wenn man diese Prüfung selbst machen möchte, was prinzipiell eine gute Übung ist. Aber dann kann man die Wandlung auch gleich noch selber schreiben, die 5% zusätzlicher Code sind dann auch schon egal. strtod hingegen macht das alles richtig und man kann hinterher sagen, ob der Ausgangs-String aus einer gültigen Zahl bestand oder nicht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.