0

我需要将字符串转换为浮点数。如果字符串不是数字,我希望返回 0。

我试图atof()通过使用以下代码来测试该功能是否适用:

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

根据我对 atof 的理解,当 atof 无法转换时返回的值为 0,而这一行打印1.0.

为什么会这样?通过文档,我了解到 atof 意味着只要输入不是数字就返回 0 。

4

3 回答 3

3

文档。强调我的

该函数首先根据需要丢弃尽可能多的空白字符(如在 isspace 中),直到找到第一个非空白字符。然后,从这个字符开始,尽可能多地采用类似于浮点文字的语法(见下文)的有效字符,并将它们解释为数值。最后一个有效字符之后的字符串的其余部分将被忽略,并且对该函数的行为没有影响。

于 2016-05-19T17:47:55.733 回答
1

然而这一行打印 1.0.

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

工作,因为atof可以解析至少一个数字,即1在这种情况下。

但:

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

应该如您预期的那样给您返回值 0.0。

于 2016-05-19T17:57:25.860 回答
1

我看到您检查了一些文档,但您一定错过了强调的部分 - 确保您彻底阅读文档很重要:http ://www.cplusplus.com/reference/cstdlib/atof/

该函数首先根据需要丢弃尽可能多的空白字符(如在 isspace 中),直到找到第一个非空白字符。然后,从这个字符开始,尽可能多地采用类似于浮点文字的语法(见下文)的有效字符,并将它们解释为数值。最后一个有效字符之后的字符串的其余部分将被忽略,并且对该函数的行为没有影响。

因此,该函数的行为完全符合其应有的行为 -a字符"1a"被忽略。

于 2016-05-19T17:47:47.647 回答