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函数会自动忽略字符串开头的空格字符,并在遇到第一个非空格字符时开始转换。