2016-05-19 2 views
0

Ich muss eine Zeichenfolge in einen Float konvertieren. Wenn der String keine Zahl mag ich zurückkehren 0.Warum gibt die Funktion atof() nicht 0 zurück, wenn ich eine Zeichenfolge mit ungültigen Zeichen nach einer Zahl übergebe?

ich versucht habe, zu testen, ob die atof() Funktion mit dem folgenden Code für diese funktionieren würde:

printf("%f", atof("1a")); 

Von meinem Verständnis von atof, die Wert, der zurückgegeben wird, wenn atof nicht konvertieren kann, ist 0, und dennoch druckt diese Zeile 1.0.

Warum passiert das? Durch die Dokumentation habe ich verstanden, dass atof 0 zurückgeben soll, wenn die Eingabe keine Zahl ist.

+0

Sie möglicherweise besser dran mit: 'Strtod()'. Beachten Sie, dass 'atof()' tatsächlich ein 'double' zurückgibt, kein' float'. Hinweis: Die Funktion 'atof()' sieht die '1' als gültige Zahl und gibt das Ergebnis der Konvertierung zurück: 1.000000. Es gibt keinen Grund für die Rückgabe von 0.000000, da es eine gültige Zahl zum Konvertieren gibt. – user3629249

Antwort

3

Von doc. Mine Emphasis

die Funktion zunächst so viele Leerzeichen verwirft (wie in isspace) nach Bedarf, bis der erste Nicht-Leerzeichen ist gefunden. Ausgehend von diesem Zeichen nimmt dann so viele Zeichen wie möglich an, die nach einer Syntax ähnlich der von Gleitkommaliteralen (siehe unten) gültig sind, und interpretiert sie als numerischen Wert. Der Rest der Zeichenfolge nach dem letzten gültigen Zeichen wird ignoriert und hat keine Auswirkungen auf das Verhalten dieser Funktion.

1

ich sah, dass Sie eine Dokumentation überprüft, aber Sie müssen die betonte Teil verpasst haben - es ist wichtig, dass Dokumentation lesen Sie gründlich zu machen: http://www.cplusplus.com/reference/cstdlib/atof/

Die Funktion zunächst verwirft so viele Leerzeichen (wie in isspace), bis das erste Nicht-Leerzeichen gefunden wurde. Ausgehend von diesem Zeichen werden dann so viele Zeichen wie möglich angenommen, die nach einer Syntax ähnlich der Fließkomma-Literale (siehe unten) gültig sind, und sie als Zahlenwert interpretiert. Der Rest der Zeichenfolge nach dem letzten gültigen Zeichen wird ignoriert und hat keine Auswirkungen auf das Verhalten dieser Funktion.

Somit wird die Funktion verhält genau so, wie es sollte - der a Charakter in "1a" ignoriert wird.

1

noch diese Zeile druckt 1,0.

printf("%f", atof("1a")); 

gearbeitet, weil atof atleast eine Zahl dh 1 in diesem Fall nicht analysieren.

Aber:

char a[]="a1"; 
printf("%f\n",atof(a)); 

sollten Sie einen Rückgabewert von 0,0 gegeben haben, wie erwartet.

Verwandte Themen