找回密码
 注册
Simdroid-非首页
查看: 206|回复: 8

[2. C/C++/C#] 从文本读入数据

[复制链接]
发表于 2007-6-8 11:17:04 | 显示全部楼层 |阅读模式 来自 安徽合肥
我从文本读入数据到c中,用的是
fp2=fopen("flux.txt", "r+");    /*打开一个文字文件读数据*/
fgets(s, strlen(s)+1, fp2);  /*向所建文件写一字符串*/
fclose(fp2);
fii2=atof(s);
从字符串转换到实型,但是我发现这样数据会丢失精度。
请问有什么办法能直接读入实型数据啊?
谢谢~~
发表于 2007-6-8 15:51:37 | 显示全部楼层 来自 湖北孝感
Simdroid开发平台
你也自己写代码啊
回复 不支持

使用道具 举报

 楼主| 发表于 2007-6-8 18:26:43 | 显示全部楼层 来自 安徽合肥
一个调用啊。怎么从文本读个数据啊~
回复 不支持

使用道具 举报

 楼主| 发表于 2007-6-10 14:02:21 | 显示全部楼层 来自 安徽合肥
我改了一下,可以运行了
   #include<stdio.h>
#include<string.h>
     void main()
     {    double fii2;         
          FILE  *fp2;
          fp2=fopen("F:\\ansysroot\\dongtai\\flux.txt", "r+");
          fscanf(fp2,"%lf",&fii2);
          printf("%lf", fii2);
          fclose(fp2);                   /*关闭文件*/   
     }

还有一个问题:
fscanf(fp2,"%lf",&fii2);
中的,%lf我改为%f,%e都不行,都得不到我想要的数,这是为什么?
谢谢~~

文件里是我随便设的0.123456

[ 本帖最后由 lilulilu 于 2007-6-10 14:04 编辑 ]
回复 不支持

使用道具 举报

发表于 2007-6-10 14:53:50 | 显示全部楼层 来自 湖北武汉
精度问题?

%d 代表整型
%c 代表单个字符
%s 代表字符串
%f 代表的是实数,可以用小数形式和指数形式的输入
%e%E%g%G与%f格式相同
%u 代表无符号的十进制整数
%o 代表八进制无符号形式输入整数
%x 代表十六进制无符号整数
同时fscanf函数还可以加上格式修饰符l或L待表输入长整型数据
h代表输入短整型数据
m代表域宽用来制定输入数据所占的宽度(列数)但不能用来制定实型数据的宽度,应为正整数
回复 不支持

使用道具 举报

 楼主| 发表于 2007-6-10 15:21:00 | 显示全部楼层 来自 安徽合肥
我是觉得好奇怪0.123456
为什么我用%e或%f就不行了,会返回一个很大的数,...e+61。
一定要用长实型?
我把数字改了0.123456e-1也是不能用%e的。改成0也是不行。
回复 不支持

使用道具 举报

发表于 2007-6-10 15:46:56 | 显示全部楼层 来自 湖北武汉
你把 double fii2
改成float fii2
然后用%e或%f,试试看

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2007-6-10 16:07:01 | 显示全部楼层 来自 安徽合肥
嘿嘿,行了。
那么用double设置类型的话用lf才行
用float的话用f或e都行,但lf不行
这就是类型匹配的问题吧
谢谢cowry
回复 不支持

使用道具 举报

发表于 2007-6-10 16:11:16 | 显示全部楼层 来自 湖北武汉
不客气

应该就是类型匹配了
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-11-1 15:36 , Processed in 0.044898 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表