首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >char *c = " 12.3“I如何将12.3存储到双变量中

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

Stack Overflow用户
提问于 2014-10-15 15:36:47
回答 2查看 243关注 0票数 0

我正在从一个包含数字(有些是整型和双精度型)并用',‘分隔的文件中读取数据。示例: 12.2,55.9,12.5我使用strtok()分隔每个数字,并保存一个指针。(我使用'c‘而不是c++)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char * num1 = "12.2";
char * num2 = "55.9";
char * num2 = "12.5";

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

我累了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
double numD1 = atof(num1);
double numD1 = double(num1);
EN

回答 2

Stack Overflow用户

发布于 2014-10-15 15:40:54

编辑了以增加调用errno == ERANGE;的价值,如下图所示

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char * num1 = "12.2";  
double numD1 = atof(num1); 

这应该是可行的。

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

double x = atof("12.2");

atof()-将字符串的初始部分转换为双精度表示。

更好的方法是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
double x = strtod("12.3", &ptr);

strtod()

C库函数double strtod(const char *str, char **endptr)将参数str指向的字符串转换为浮点数(类型为double)。如果endptr不是NULL,则指向转换中使用的最后一个字符之后的字符的指针将存储在endptr引用的位置。如果由于正确的值超出了可表示值的范围,strtod()无法转换字符串,则它会将errno设置为ERANGE (在errno.h中定义)。

下面是一个使用具有两个输入的strtod();的示例:(还说明了errno的用法)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <errno.h>

int main ()
{
    char input[] = "10.0 5.0";
    char bad1[] = "0.3e500";
    char bad2[] = "test";
    char *ptr;
    double a, b, c;

    errno = 0;
    a = strtod (input,&ptr);
    if(errno != ERANGE)
    {
        errno = 0;
        b = strtod (ptr,0);
        if(errno != ERANGE)
        {
             printf ("a: %*.2lf\nb: %*.2lf\nQuotient = %*.2lf\n", 12, a, 12, b, 3, a/b);
        }else printf("errno is %d\n", errno);
    } else printf("errno is %d\n", errno);
    
    //bad numeric input     
    errno = 0;
    c = strtod (bad1, &ptr);
    if(errno != ERANGE)
    {
        printf ("Output= %.2lf\n", c);
    } else printf("errno is %d\n", errno);
    
    //text input
    errno = 0;
    c = strtod (bad2, &ptr);
    if(ptr != bad2)
    {
        printf ("Output= %.2lf\n", c);
    } else printf("invalid non-numeric input: \"%s\" \n", ptr);
    getchar();
    
    return 0;
}  
票数 6
EN

Stack Overflow用户

发布于 2014-10-15 15:43:29

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26386506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文