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

Sud*_*ent 0 c double pointers char

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

char * num1 = "12.2";
char * num2 = "55.9";
char * num2 = "12.5";
Run Code Online (Sandbox Code Playgroud)

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

我累了:

double numD1 = atof(num1);
double numD1 = double(num1);
Run Code Online (Sandbox Code Playgroud)

ryy*_*ker 6

编辑以增加值调用errno == ERANGE;,下面的插图

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

char * num1 = "12.2";  
double numD1 = atof(num1); 
Run Code Online (Sandbox Code Playgroud)

这应该有效.

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

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;
}  
Run Code Online (Sandbox Code Playgroud)

  • `atof`返回`double`:http://man7.org/linux/man-pages/man3/atof.3.html (2认同)
  • 同意`strtod()`比`atof()`更好.展示如何使用`ptr`和也许'errno`将改善答案. (2认同)