Forum: PC-Programmierung C: String auf Double überprüfen


von cubbi (Gast)


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?

von Peter II (Gast)


Lesenswert?

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.

von Tom M. (tomm) Benutzerseite


Lesenswert?

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.

von c-bastler (Gast)


Lesenswert?

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).

von Peter II (Gast)


Lesenswert?

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.

von Tom M. (tomm) Benutzerseite


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.

von DirkB (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


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.

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
Noch kein Account? Hier anmelden.