C: String auf Double überprüfen

Gast #2422315
Lesenswert?

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?
Persönliche Seite #2422348
Lesenswert?

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.
#2422553
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren