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

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

你只有一个数据,不需要循环读。
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); // 实参 用地址
其它语句
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-09
请问一下,A函数将数据存入tmp.dat的格式是什么,是double,还是float
如果是double的话
将fcanf(fp,"%f",&velocity); 改成 fwrite(&velocity,sizeof(double),1,fp);
如果是float的话
改成 fwrite(&velocity,sizeof(float),1,fp);
并且你定义的变量welocity 也必须是相应的类型

你可以试试
第2个回答  2013-08-10
不熟悉FLUENT UDF编程,:-(,不过通过它的文档了解到:
注意:UDF解释函数在单精度算法中定义real类型为float型,在双精度算法宏定义real为double型。
也就是说,在写入real类型的数据时,采用的是float还是double,取决于是单精度算法还是多精度算法。所以说这个问题的关键在于写入的数据是什么类型的float还是double?而在读取数据的时候float采用fscanf(fp, "%f", &f);double采用fscanf(fp, "%lf", &d);

希望对你有所帮助
相似回答