关于文件输入输出的问题
我做一个重力坝问题,想从txt文件中读入数据,但是读入的数据都为零. 我用同样的代码格式写了另一个检测程序,却能读入数据,一点问题都没有,这是怎么回事,请教?
请教?
以下是程序代码
#include <stdio.h>
#include <stdlib.h>
double *point_G = (double*) malloc(2*sizeof(double));
double *point_P = (double*) malloc(4*sizeof(double));
double *point_U = (double*) malloc(2*sizeof(double));
double B;//坝顶宽度
double d;//坝顶超高
double HDM;//坝顶高程
double HJM;//坝基面高程
double HJ1;//校核洪水位
double HJ2;//校核洪水位时下游水位
double HS1;//设计洪水位
double HS2;//设计洪水位对应的下游水位
double H0;//校核洪水位-坝基面高程
double H1;//上游水位
double H2;//下游水位
double H3;//上游起坡点距坝基面高度
double Hz;//上游起坡点高程
double n;//上游坡度
double n0;
double m;//下游坡度
double m0;
double rc=24;//混凝土容重
double rw=10;//水容重
double V;
double a=0.25;//扬压力折减系数
double f=0.15;//主排水孔中心线与坝基交点到坝踵距离与坝底宽度的比值,初选时可定为0.15
double TotalW;
double TotalH;
double TotalM;
double T;
double K1,K2;
double q1,q2;
double f1,c1;
struct sample
{
double m;
double n;
double v;
double k1;
double k2;
}dam[25];
void G();
void P();
void U();
void calculate(char* in, char* out);
int main()
{
int check=1; char y;
char *in_data_file;
char *out_data_file;
in_data_file = (char*)malloc(100*sizeof(char));
out_data_file = (char*)malloc(100*sizeof(char));
while(check == 1)
{
//fflush(stdin);
printf("Please enter your input data whole file name: \n");
scanf("%s", in_data_file);
printf("Please enter your output data whole file name: \n");
scanf("%s", out_data_file);
calculate(in_data_file, out_data_file);
fflush(stdin);
printf("Do you want to continue?(y or n): ");
scanf("%c", &y);
printf("\n\n\n");
if (y =='n') check = 0;
}
system("pause");
return 0;
}
/*计算自重的函数*/
void G()
{
double G1=m*H0*H0*rc/2;
double X1=2*m*H0/3-T/2;
double MG1=G1*X1;
double G2=n*H3*H3*rc/2;
double X2=T/2-2*n*H3/3;
double MG2=G2*X2;
double G3=rc*B*d;
double X3=T/2-n*H3-B/2;
double MG3=G3*X3;
double G4=rc*B*B/2/m;
double X4=T/2-n*H3-2*B/3;
double MG4=G4*X4;
*point_G=G1+G2+G3+G4; //为G的值
*(point_G+1)=MG1+MG2+MG3+MG4; // 为MG的值
}
/*计算水压力的函数*/
void P()
{
double P1=-rw*H1*H1/2;
double Y1=1.0/3.0*H1;
double MP1=P1*Y1;
double P2=rw*H2*H2/2;
double Y2=H2/3;
double MP2=P2*Y2;
double W1=rw*(H1-H3)*n*H3;
double X5=T/2-n*H3/2;
double MW1=W1*X5;
double W2=rw*n*H3*H3/2;
double X6=T/2-n*H3/3;
double MW2=W2*X6;
double W3=rw*m*H2*H2/2;
double X7=-(T/2-m*H2/3);
double MW3=W3*X7;
*point_P=W1+W2+W3; //为W的值
*(point_P+1)=MP1+MP2+MW1+MW2+MW3;//为MP的值
*(point_P+2)=P1;
*(point_P+3)=P2;
}
/*计算扬压力的函数*/
void U()
{
double U0=-rw*T*H2;
double H=H1-H2;
double U1=-rw*f*T*(H-a*H)/2;
double X8=T/2-f*T/3;
double MU1=U1*X8;
double U2=-rw*a*H*f*T;
double X9=T/2-T*f/2;
double MU2=U2*X9;
double U3=-rw*(1-f)*T*a*H/2;
double X10=2.0/3.0*(1-f)*T-T/2;
double MU3=U3*X10;
*point_U=U0+U1+U2+U3; //为U的值
*(point_U+1)=MU1+MU2+MU3; //为MU的值
}
void calculate(char* in, char* out)
{
int i=0,j=0,num=0;
FILE* fp;
FILE* fq;
fp = fopen(in, "rb");
if (fp == NULL)
{
printf("There isn't any data files you entered in\n");
system("pause");
exit(1);
}
fscanf(fp, "%f %f %f %f %f %f %f %f %f %f", &HJ1, &HJ2, &HS1, &HS2, &HJM, &HDM, &B, &Hz, &f1, &c1);
fclose(fp);
for(n=0;n<0.205;n+=0.05)
for(m=0.60;m<0.805;m+=0.05)
{
H0=HJ1-HJM;
H3=Hz-HJM;
T=m*H0+n*H3;
H1=HJ1-HJM;
H2=HJ2-HJM;
G();
P();
U();
TotalH=-( *(point_P+2)+ *(point_P+3));
TotalW= *point_G + *(point_G+1);
TotalM=*(point_G+1) + *(point_P+1) + *(point_U+1);
K1=(f1*(TotalW+ *point_U)+c1*T)/TotalH; //f从哪里来的
q1=(TotalW+ *point_U)/T+6*TotalM/T/T;
H1=HS1-HJM;
H2=HS2-HJM;
P();
U();
TotalH=-( *(point_P+2)+ *(point_P+3));
TotalW= *point_G + *(point_G+1);
TotalM= *(point_G+1) + *(point_P+1) + *(point_U+1);
K2=(f1*(TotalW + *point_U)+c1*T)/TotalH;
q2=(TotalW+ *point_U)/T+6*TotalM/T/T;
if ((q1>=0)&&(q2>=0)&&(K1>=2.5)&&(K2>=3.0))
{
dam[i].n=n;
dam[i].m=m;
dam[i].k1=K1;
dam[i].k2=K2;
V= *point_G / rc;
dam[i].v=V ;
num++; i++;
}
}
/*按照坝单宽体积从小到大的顺序排序*/
for(i=0;i<num-1;i++)
for(j=i+1;j<num;j++)
{
if(dam[i].v>dam[j].v)
{
struct sample temp;
temp=dam[j];
dam[j]=dam[i];
dam[i]=temp;
}
}
printf("%f %f", HJ1, HJ2);
fq = fopen(out, "wb");
for(i=0; i<num; i++)
{
fprintf(fq, "dam %d\n", i+1);
fprintf(fq, "K1 %f\n",dam[i].k1);
fprintf(fq, "K2 %f\n",dam[i].k2);
fprintf(fq, "m %f\n",dam[i].m);
fprintf(fq, "n %f\n",dam[i].n);
fprintf(fq, "v %f\n",dam[i].v);
fprintf(fq, "%d", num);
}
fclose(fq);
}
/*按照坝单宽体积从小到大的顺序输出符合要求的数据*/
以下是测试程序代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int check = 1;
char* in_data_file;
char* out_data_file;
char y;
in_data_file = (char*)malloc(100*sizeof(char));
out_data_file = (char*)malloc(100*sizeof(char));
float f1, f2;
FILE* fp;
FILE* fq;
while(check == 1)
{
//fflush(stdin);
printf("Please enter your input data whole file name: \n");
scanf("%s", in_data_file);
printf("Please enter your output data whole file name: \n");
scanf("%s", out_data_file);
if( (fp=fopen(in_data_file, "rb")) == NULL )
{
printf("Wrong\n");
}
fscanf(fp, "%f %f", &f1, &f2);
fclose(fp);
printf("%f %f", f1, f2);
fq = fopen(out_data_file, "wb");
fprintf(fq, "%f %f", f1, f2);
fclose(fq);
fflush(stdin);
printf("\nDo you want to continue?(y or n): ");
scanf("%c", &y);
printf("\n\n\n");
if (y =='n') check = 0;
}
system("pause");
return 0;
}
[解决办法]
fscanf(fp, "%f %f %f %f %f %f %f %f %f %f", &HJ1, &HJ2, &HS1, &HS2, &HJM, &HDM, &B, &Hz, &f1, &c1); 修改为:fscanf(fp, "%lf %lf %lf %lf %lf %lf %lf %lf %lf %lf", &HJ1, &HJ2, &HS1, &HS2, &HJM, &HDM, &B, &Hz, &f1, &c1);
[解决办法]
fscanf(fp, "%f %f %f %f %f %f %f %f %f %f", &HJ1, &HJ2, &HS1, &HS2, &HJM, &HDM, &B, &Hz, &f1, &c1); 修改为:fscanf(fp, "%lf %lf %lf %lf %lf %lf %lf %lf %lf %lf", &HJ1, &HJ2, &HS1, &HS2, &HJM, &HDM, &B, &Hz, &f1, &c1);