首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于文件输入输出的有关问题

2012-04-16 
关于文件输入输出的问题我做一个重力坝问题,想从txt文件中读入数据,但是读入的数据都为零. 我用同样的代码

关于文件输入输出的问题
我做一个重力坝问题,想从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;
}

[解决办法]

C/C++ code
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);
[解决办法]
C/C++ code
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); 

热点排行