2016-05-19 4 views
0

文字列を浮動小数点数に変換する必要があります。 atof、の私の理解から数値の後に無効な文字列を渡すとatof()関数が0を返さないのはなぜですか?

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

:文字列が数値でない場合、私は次のコードを使用して、私はatof()機能は、このために働くだろうかどうかをテストしようとしています0

戻りたいですatofが変換できないときに返される値は0ですが、この行は1.0を出力します。

どうしてですか?ドキュメントでは、atofは入力が数字でないときは0を返すことを意味すると理解していました。

+0

'strtod()'を使う方が良いかもしれません。 'atof()'は実際に 'float'ではなく' double'を返します。注:関数 'atof()'は、有効な数値として '1'を見て、変換の結果を返します:1.000000。有効な数値が変換されるため、0.000000を返す理由はありません。 – user3629249

答えて

3

doc。最初の非空白文字まで、必要に応じて重点鉱山

関数が最初( isspaceのように)など、多くの空白文字を破棄が見つかりました です。次に、この文字から始めて、は、 浮動小数点リテラル(以下を参照)の構文に似た構文の後に有効な数字である をできるだけ多く取り、数字を と解釈します。最後の有効な文字である の後の残りの文字列は無視され、この関数の動作には影響しません。

1

私はあなたには、いくつかのドキュメントをチェックすることを見ましたが、あなたは強調部分を見逃している必要があります - それはあなたが徹底的にドキュメントを読むことを確認することが重要です:http://www.cplusplus.com/reference/cstdlib/atof/

関数は最初のisspaceのように(できるだけ多く空白文字を破棄)を最初の非空白文字が見つかるまで必要に応じて変更します。次に、この文字から始めて、浮動小数点リテラル(以下を参照)の構文に似た構文に従って有効な文字をできるだけ多く取り、それらを数値として解釈します。 最後の有効な文字の後の残りの文字列は無視され、この関数の動作には影響しません。

このように、機能が正確にそれが必要として動作している - "1a"a文字は無視されています。

1

まだこのラインは1.0を出力します。

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

atof、この場合には1すなわち少なくとも1つの番号を解析する可能性があるために働きました。

しかし:あなたは予想通り

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

はあなたに0.0の戻り値を与えているはずです。

関連する問題