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 展开
一段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 展开
3个回答
展开全部
你只有一个数据,不需要循环读。
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); // 实参 用地址
其它语句
}
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); // 实参 用地址
其它语句
}
展开全部
请问一下,A函数将数据存入tmp.dat的格式是什么,是double,还是float
如果是double的话
将fcanf(fp,"%f",&velocity); 改成 fwrite(&velocity,sizeof(double),1,fp);
如果是float的话
改成 fwrite(&velocity,sizeof(float),1,fp);
并且你定义的变量welocity 也必须是相应的类型
你可以试试
如果是double的话
将fcanf(fp,"%f",&velocity); 改成 fwrite(&velocity,sizeof(double),1,fp);
如果是float的话
改成 fwrite(&velocity,sizeof(float),1,fp);
并且你定义的变量welocity 也必须是相应的类型
你可以试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不熟悉FLUENT UDF编程,:-(,不过通过它的文档了解到:
注意:UDF解释函数在单精度算法中定义real类型为float型,在双精度算法宏定义real为double型。
也就是说,在写入real类型的数据时,采用的是float还是double,取决于是单精度算法还是多精度算法。所以说这个问题的关键在于写入的数据是什么类型的float还是double?而在读取数据的时候float采用fscanf(fp, "%f", &f);double采用fscanf(fp, "%lf", &d);
希望对你有所帮助
注意:UDF解释函数在单精度算法中定义real类型为float型,在双精度算法宏定义real为double型。
也就是说,在写入real类型的数据时,采用的是float还是double,取决于是单精度算法还是多精度算法。所以说这个问题的关键在于写入的数据是什么类型的float还是double?而在读取数据的时候float采用fscanf(fp, "%f", &f);double采用fscanf(fp, "%lf", &d);
希望对你有所帮助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询