char * c =" 12.3"我如何将12.3存储到双变量中

时间:2014-10-15 15:36:47

标签: c pointers char double

我正在读取一个包含数字(有些是int和double)的文件,并用','分隔。    例如:12.2,55.9,12.5    我使用strtok()分隔每个数字并保存一个指针。    (我使用' c' NOT c ++)。

char * num1 = "12.2";
char * num2 = "55.9";
char * num2 = "12.5";

我想将每个数字存储在自己的双变量中。

我累了:

double numD1 = atof(num1);
double numD1 = double(num1);

2 个答案:

答案 0 :(得分:6)

已编辑 以添加值errno == ERANGE;,以下为插图

首先,在您的帖子中,您表示您尝试过:

char * num1 = "12.2";  
double numD1 = atof(num1); 

这应该有效。

最简单的方法 是:(正如您已经尝试过的那样)

double x = atof("12.2");

atof - 将字符串的初始部分转换为双重表示。

更好的是:

double x = strtod("12.3", &ptr); //

strtod - 将字符串的初始部分转换为双重表示。该函数跳过字符串开头的空格字符。当到达不能成为数字一部分的字符时,转换停止。 strtod获取指向字符串未转换部分的指针。主题序列的预期形式是可选的加号或减号,然后是非空的数字序列,可选地包含小数点字符,然后是可选的指数部分。
此外:
如果strtod()无法转换字符串,因为正确的值超出了可表示值的范围,则它将errno设置为ERANGE(在errno.h中定义)。

以下是使用strtod();和两个输入的示例:(也说明了使用errno)

#include <errno.h>

int main ()
{
    char input[] = "10.0 5.0";
    char badInput[] = "0.3e500";
    char *ptr, *ptr2;
    double a, b, c;
    int err;

    a = strtod (input,&ptr);
    b = strtod (ptr,0);
    if(errno != ERANGE)
    {
        printf ("Output= %.2lf\n", a/b);
    } else printf("error\n");

    c = strtod (badInput, &ptr2);
    if(errno != ERANGE)
    {
        printf ("errno is %d\n", errno);
    } else printf("error\n");
    getchar();

    return 0;
}  

答案 1 :(得分:1)

要使atof正常工作,您需要包含头文件stdlib.h