C语言中,请问如何从字符串中读取所有的浮点数(个数不知道),浮点数以空格隔开

C语言中,请问如何从字符串中读取所有的浮点数(个数不知道),浮点数以空格隔开,第1张

用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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9669565.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存