下面是我编的一个程序,运行出来应该有100行数据(每行5个),可是当存入txt时由于main函数的for循环使得每次得出的五个数据把前一行的数据覆盖了,最后Data中输出的数据只有一行,哪位高手来帮帮忙修改修改啊,小弟在此先谢谢大家了!
#include<stdio.h>
#include<math.h>
float i,j,T,GTi,GAl,xAla,xAlb,oTiAla,oTiAlb,Gma,Gmb,R=8.314;
void WriteDat()
{
FILE *Data;
Data=fopen("Data.txt","w");
printf("%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t\n",xAla,Gma,xAlb,Gmb,T);
fprintf(Data,"%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t\n",xAla,Gma,xAlb,Gmb,T);
fclose(Data);
}
void main()
{
printf("Please input a number that between 0 and 3000:\n");
scanf("%f",&i);
T=273+900+i*0.1;
GTi=5758.548+38.38941*T-7.4305*T*log(T)+9.36357*0.001*T*T-1.048055*0.000001*T*T*T-525090/T;
GAl=4602-3.013*T;
for(j=1;j<=100;j++)
{
xAla=0.001*j;
xAlb=xAla;
oTiAla=(-123788.5+33.20902*T)+(16034.9-12.18272*T)*(2*xAla-1);
oTiAlb=(-117572.6+32.45153*T)+(4835.982-1.410195*T)*(2*xAlb-1);
Gma=R*T*((1-xAla)*log(1-xAla)+xAla*log(xAla))+oTiAla*xAla*(1-xAla);
Gmb=(1-xAlb)*GTi+xAlb*GAl+R*T*((1-xAlb)*log(1-xAlb)+xAlb*log(xAlb))+oTiAlb*xAlb*(1-xAlb);
WriteDat();
printf("%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t\n",xAla,Gma,xAlb,Gmb,T);
}
}
使用fopen时参数不正确,你是用 w参数,若文件存在则文件长度清为0,即该文件内容会消失。每次都是重新清空并写数据, 将w修改为a即可.
fopen函数说明见下方:
---------------
FILE * fopen(const char * path,const char * mode);
[编辑本段]函数说明
参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
mode有下列几种形态字符串:
r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
rb+ 读写打开一个二进制文件,只允许读写数据。
rt+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
wt+ 读写打开或着建立一个文本文件;允许读写。
at+ 读写打开一个文本文件,允许读或在文本末追加数据。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。