我正在读取一个包含数字(有些是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);
答案 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
。