C语言字符串转换double等类型(sscanf,atof,strod)

C语言字符串转换double等类型

1. 使用atof

atof
语法:
  #include <stdlib.h>
  double atof( const char *str );
 

功能:将字符串str转换成一个双精度数值并返回结果。 
参数str 必须以有效数字开头,但是允许以“E”或“e”除外的任意非数字字符结尾。例如:

    x = atof( "42.0is_the_answer" );
x的值为42.0.

例子:

//atof 直接转换str字符串为double型并返回数据
#include <stdio.h>
#include <stdlib.h>

int main() {
    char p[] = "  123.4567  ";
    double f;
     f=atof(p);
    printf("%fn", f);
    return 0;
}
  • 注意:忽略空格

 

2. 使用 sscanf

sscanf 
语法: 
  #include <stdio.h>
  int sscanf( const char *buffer, const char *format, ... );
  
 其中:

    str:要进行格式化读取的字符串。
    format:格式化字符串,用于指定格式如何读取str中的内容。
    ...:可选参数列表,用于存放读取出来的数据 例如&f。

例子:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char p[] = "  123.4567  ";
    double f;
    sscanf(p,"%lf",&f);
    
    printf("%fn", f);



    //sscanf——空格用于分隔符,可以用它来分隔字符串中的不同部分
    char str[] = "123  456";
    int a, b;
    sscanf(str, "%d%d", &a, &b);
    printf("%d%dn", a,b);
    return 0;
}

在这里插入图片描述

注意:
sscanf解析字符串时,空格通常被用作分隔符,可以用它来分隔字符串中的不同部分。

例如,以下代码将把字符串"123 456"中的两个整数读入a和b中,空格用作分隔符:

char str[] = "123  456";
int a, b;
sscanf(str, "%d%d", &a, &b);

在这个例子中,sscanf会忽略字符串中的多余空格,并将"123"解析为a的值,将"456"解析为b的值。

 

3. 使用strtod

 #include <stdlib.h>
  double strtod( const char *start, char **end );
 

功能:函数返回带符号的字符串start所表示的浮点型数。

第二个参数endptr是一个指向字符指针的指针,用于指向转换后字符串的结尾位置。
如果endptr为NULL,则不返回结尾位置信息。

如果溢出发生,返回HUGE_VAL或 -HUGE_VAL

例子:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char p[] = "  123.4567  ";
    double f = strtod(p, NULL);
    printf("%fn", f);
    return 0;
}
  • 注意:strtod函数会自动忽略字符串开头的空格字符,并在遇到第一个非空格字符时开始转换。