用sscanf确实可以实现,代码如下:
#include
int
main()
{
char
str="10
20
30
40
500"
;
int
i
;
double
d
;
i=0;
while(
str
==
'
'
)
str++
;
while(
sscanf(
str,
"%lf"
,
&d
)==1
)
{
while(
str
!=
'
'
)
str++
;
//跳过已读过的数
i++;
printf(
"d:%03d=
%lf\n"
,
i
,
d
);
while(
str
==
'
'
)
str++
;
//跳过分格符:空格
}
printf(
"there
is(are)
%d
float
num(s)
in
str\n"
,
i
);
return
0;
}
当然,你也可以用strtok()函数过获取数据,细节可参看相应的函数介绍
可以查看,(例如,用sprintf, 转成字符串,一个字符一个字符地统计。)但得到的结果不一定可靠,或不是期望的。
原因是 计算机内部用 2进制,我们输入输出用 10进制。 10进制到2进制,小数部分常 “化不净”,2进制再转回10进制,又 “化不净”。
float类型的变量,精度只有 6-7 位有效数字,超出7 位又引进 “截断误差”。
例如:
float x = 00000000000000000012300; 眼睛可以看出有20位小数,不是22位小数。
但通过计算机,化不净,引进 截断误差:
printf("%g\n",x); //123e-018 --- 这个可以,18+2位得 20
printf("%15g\n",x); // 122999999327834e-018 -- 这个 不行了。
C++可以设定格式化输出方式,至于如何设定,记不太清了,你可以百度一下。C#中可以直接使用控制台输出格式ConsoleWrite("{0:N}",1000000000)实现,其中1000000000可以换成相应的变量名。
假定你用定点格式 %f 形式写数,我们可以 把它当 字符串 读入,便于处理:
#include <stdioh>
void main( )
{
char s[80];
int i;
printf("input a float number -123456789:\n");
gets(s);
for(i=0;i<strlen(s);i++){ if (s[i] >= '0' && s[i] <= '9') printf("%c ",s[i]); }
}
例如输入 -123456789
输出 1 2 3 4 5 6 7 8 9
float a=0123456789;
printf("%f\n",a);
结果输出:是0123457 而不是0123456
float输出到小数点后第六位,第六位是四舍五入的
float精确到七位小数。
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,因为它是不变的,故不能对精度造成影响。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字。
简介:
浮点型数据类型,FLOAT 数据类型用于存储单精度浮点数或双精度浮点数。浮点数使用 IEEE(电气和电子工程师协会)格式。
浮点类型的单精度值具有 4 个字节,包括一个符号位、一个 8 位 二进制指数和一个 23 位尾数。由于尾数的高顺序位始终为 1,因此它不是以数字形式存储的。此表示形式为 float 类型提供了一个大约在 -34E+38 ~ 34E+38 之间的范围。
以上就是关于C语言中,请问如何从字符串中读取所有的浮点数(个数不知道),浮点数以空格隔开全部的内容,包括:C语言中,请问如何从字符串中读取所有的浮点数(个数不知道),浮点数以空格隔开、在c语言中如何查看一个float类型的变量小数点后有几位数、现在用float类型获得一个很大的数字 例如:1,000,000,000等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)