C语言实现读取.dat或.txt的数据并赋值给一个real变量

C语言很差,先描述一下问题:一段FLUENTUDF,在一个子函数A中获得一个数据存在一个临时的文件tmp.dat中,下一段函数B需要调用这个值,目前的想法有两个:1、在下... C语言很差,先描述一下问题:
一段FLUENT UDF,在一个子函数A中获得一个数据存在一个临时的文件tmp.dat中,下一段函数B需要调用这个值,目前的想法有两个:
1、在下一段函数中用FILE *读取tmp.dat中的数据(w+型文件,始终只有一个数据),然后赋给一个real变量velocity。问题是读出来的貌似是一个字符串,无法赋给real;
2、定义一个外部变量extern real velocity,在A中把得到的数据返回给velocity,然后在B中直接调用这个值。但是A是一个void函数,返回值不知道该怎么返回。

程序内容无关紧要,且写的很乱,就不贴上来了,免得贻笑大方。
不知道两种思路有没有问题,希望能针对两种思路给一段示例代码,多谢!

另外,关于第一种想法:
FILE *fp;
fp=fopen("tmp.dat","r");
while(!feof(fp))
{
fscanf(fp,"%f",&velocity);
}
fclose(fp);

Message ("velocity=%f\n",velocity);
控制台输出的velocity显示为0.000000,但是tmp.dat中是500.000006
展开
 我来答
金色潜鸟
2013-08-10 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5743万
展开全部
你只有一个数据,不需要循环读。
float velocity;
FILE *fp;
fp=fopen("tmp.dat","r");
fscanf(fp,"%f",&velocity);
fclose(fp);
就可以了。

double velocity; 则用 格式 %lf -- fscanf(fp,"%lf",&velocity);

数据传递可以通过全局量:
float velocity;
void A(...);
void B(....);
---------------------------------
数据传递可以通过函数参数:
void A(int x, float *velocity){
FILE *fp;
fp=fopen("tmp.dat","r");
fscanf(fp,"%f",velocity);
fclose(fp);
} // 形参 用指针

void B(....){
float velocity;
A(x, &velocity); // 实参 用地址
其它语句
}
1403217744
2013-08-09 · 超过15用户采纳过TA的回答
知道答主
回答量:29
采纳率:0%
帮助的人:35.6万
展开全部
请问一下,A函数将数据存入tmp.dat的格式是什么,是double,还是float
如果是double的话
将fcanf(fp,"%f",&velocity); 改成 fwrite(&velocity,sizeof(double),1,fp);
如果是float的话
改成 fwrite(&velocity,sizeof(float),1,fp);
并且你定义的变量welocity 也必须是相应的类型

你可以试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
捷训
2013-08-10 · TA获得超过113个赞
知道答主
回答量:28
采纳率:100%
帮助的人:34.4万
展开全部
不熟悉FLUENT UDF编程,:-(,不过通过它的文档了解到:
注意:UDF解释函数在单精度算法中定义real类型为float型,在双精度算法宏定义real为double型。
也就是说,在写入real类型的数据时,采用的是float还是double,取决于是单精度算法还是多精度算法。所以说这个问题的关键在于写入的数据是什么类型的float还是double?而在读取数据的时候float采用fscanf(fp, "%f", &f);double采用fscanf(fp, "%lf", &d);

希望对你有所帮助
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式