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)
编辑以增加值调用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)
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |