求救,连续两次输出,但输出结果却不一样!!!

mechanicser 2016-08-17 07:33:26
自己写了一个函数,作计算用的,为了方便一个续写在主函数生成的文件里(TXT),另一个就更简洁地写到新开的文件里(TXT),只记录关键步骤用的,但是这个新开的文件与续写的那个文件内容却不一样!!!但我要是把新开的那个文件输出用的fo改成cout输出到屏幕就对了,我就纳闷了怎么回事。。。
int wind_load_cal(MEMBER BJ[],int countb,int count_wsec,STAAD_JOINT LNA[],int size1,STAAD_JOINT LNB[],int size2,STAAD_JOINT LNC[],int size3,STAAD_JOINT LND[],int size4,char *autowindfilename)//将风压分段拆成小段并计算风压值
{
ofstream fout;//fout是在AUTO_WIND_LOG中续写的,fo是新开一个文件直接记录风压计算内容,跳过各种选点,选杆件的过程
ofstream fo;
fout.open(autowindfilename,ios::app);
fo.open("WIND_CAL.TXT");
int i,j,k,l,m;
int temp1,temp2;
temp1 = 0;
temp2 = 0;
int count_sec = 0;
int count = 0;
double Y1,Y2;
double DY;
double DBJY;
fout << right;
//现对TEMP1[]清零
for(i=0;i<8;i++)//TEMP1只有8个维数
{
TEMP1[i].JOINT = 0;
TEMP1[i].X = 0.000000;
TEMP1[i].Y = 0.000000;
TEMP1[i].Z = 0.000000;
}

for(j=0,k=j+1;j<(size1-1)&&k<size1;j++,k++)//8点分配完毕,按道理0,2,4,6这4点Y值应该相同,1,3,5,7这4点Y值应该相同,这里默认size1=size2=size3=size4的,否则计算结果不正确,size都是countX+2,最后j++,k++,而不是j+=2,k+=2,因为就是往下进一位到本层下端,而不是进两位跑到下一层下端去了
{
count_sec++;
TEMP1[0].JOINT = LNA[j].JOINT;
TEMP1[0].X = LNA[j].X;
TEMP1[0].Y = LNA[j].Y;
TEMP1[0].Z = LNA[j].Z;
TEMP1[1].JOINT = LNA[k].JOINT;
TEMP1[1].X = LNA[k].X;
TEMP1[1].Y = LNA[k].Y;
TEMP1[1].Z = LNA[k].Z;
TEMP1[2].JOINT = LNB[j].JOINT;
TEMP1[2].X = LNB[j].X;
TEMP1[2].Y = LNB[j].Y;
TEMP1[2].Z = LNB[j].Z;
TEMP1[3].JOINT = LNB[k].JOINT;
TEMP1[3].X = LNB[k].X;
TEMP1[3].Y = LNB[k].Y;
TEMP1[3].Z = LNB[k].Z;
TEMP1[4].JOINT = LNC[j].JOINT;
TEMP1[4].X = LNC[j].X;
TEMP1[4].Y = LNC[j].Y;
TEMP1[4].Z = LNC[j].Z;
TEMP1[5].JOINT = LNC[k].JOINT;
TEMP1[5].X = LNC[k].X;
TEMP1[5].Y = LNC[k].Y;
TEMP1[5].Z = LNC[k].Z;
TEMP1[6].JOINT = LND[j].JOINT;
TEMP1[6].X = LND[j].X;
TEMP1[6].Y = LND[j].Y;
TEMP1[6].Z = LND[j].Z;
TEMP1[7].JOINT = LND[k].JOINT;
TEMP1[7].X = LND[k].X;
TEMP1[7].Y = LND[k].Y;
TEMP1[7].Z = LND[k].Z;
//首先检查4点4点Y值是否相等
fout << endl;
fout << "SECTION " << count_sec << endl;
fo << "SECTION " << count_sec << endl;
fout << setw(6) << TEMP1[0].JOINT << setw(6) << TEMP1[2].JOINT << setw(6) << TEMP1[4].JOINT << setw(6) << TEMP1[6].JOINT << setw(6) << TEMP1[1].JOINT << setw(6) << TEMP1[3].JOINT << setw(6) << TEMP1[5].JOINT << setw(6) << TEMP1[7].JOINT << endl;
fo << setw(6) << TEMP1[0].JOINT << setw(6) << TEMP1[2].JOINT << setw(6) << TEMP1[4].JOINT << setw(6) << TEMP1[6].JOINT << setw(6) << TEMP1[1].JOINT << setw(6) << TEMP1[3].JOINT << setw(6) << TEMP1[5].JOINT << setw(6) << TEMP1[7].JOINT << endl;
fout << " >>> CHECK 8 nodes' coordinate Y value." << endl;
if(ABSD(TEMP1[0].Y-TEMP1[2].Y>0.0001)||ABSD(TEMP1[2].Y-TEMP1[4].Y>0.0001)||ABSD(TEMP1[4].Y-TEMP1[6].Y>0.0001)||ABSD(TEMP1[6].Y-TEMP1[0].Y>0.0001))
{
fout << " >>> ERROR! 4 nodes' coordinate Y is NOT SAME! WIND LOAD CALCULATION will be WRONG! CHECK YOUR MODEL! " << endl;
fout << " >>> " << setw(6) << TEMP1[0].JOINT << setw(6) << TEMP1[2].JOINT << setw(6) << TEMP1[4].JOINT << setw(6) << TEMP1[6].JOINT << endl;
cout << " >>> ERROR! 4 nodes' coordinate Y is NOT SAME! WIND LOAD CALCULATION will be WRONG! CHECK YOUR MODEL! " << endl;
cout << " >>> " << setw(6) << TEMP1[0].JOINT << setw(6) << TEMP1[2].JOINT << setw(6) << TEMP1[4].JOINT << setw(6) << TEMP1[6].JOINT << endl;
temp1 = 0;
}
else if(ABSD(TEMP1[0].Y-TEMP1[2].Y<0.0001)&&ABSD(TEMP1[2].Y-TEMP1[4].Y<0.0001)&&ABSD(TEMP1[4].Y-TEMP1[6].Y<0.0001)&&ABSD(TEMP1[6].Y-TEMP1[0].Y<0.0001))
{
fout << " >>> 4 nodes' coordinate Y value check is SAME! -OK- " << endl;
fout << " >>> " << setw(6) << TEMP1[0].JOINT << setw(6) << TEMP1[2].JOINT << setw(6) << TEMP1[4].JOINT << setw(6) << TEMP1[6].JOINT << endl;
temp1 = 1;
}

if(ABSD(TEMP1[1].Y-TEMP1[3].Y>0.0001)||ABSD(TEMP1[3].Y-TEMP1[5].Y>0.0001)||ABSD(TEMP1[5].Y-TEMP1[7].Y>0.0001)||ABSD(TEMP1[7].Y-TEMP1[1].Y>0.0001))
{
fout << " >>> ERROR! 4 nodes' coordinate Y is NOT SAME! WIND LOAD CALCULATION will be WRONG! CHECK YOUR MODEL! " << endl;
fout << " >>> " << setw(6) << TEMP1[1].JOINT << setw(6) << TEMP1[3].JOINT << setw(6) << TEMP1[5].JOINT << setw(6) << TEMP1[7].JOINT << endl;
cout << " >>> ERROR! 4 nodes' coordinate Y is NOT SAME! WIND LOAD CALCULATION will be WRONG! CHECK YOUR MODEL! " << endl;
cout << " >>> " << setw(6) << TEMP1[1].JOINT << setw(6) << TEMP1[3].JOINT << setw(6) << TEMP1[5].JOINT << setw(6) << TEMP1[7].JOINT << endl;
temp2 = 0;
}
else if(ABSD(TEMP1[1].Y-TEMP1[3].Y<0.0001)&&ABSD(TEMP1[3].Y-TEMP1[5].Y<0.0001)&&ABSD(TEMP1[5].Y-TEMP1[7].Y<0.0001)&&ABSD(TEMP1[7].Y-TEMP1[1].Y<0.0001))
{
fout << " >>> 4 nodes' coordinate Y value check is SAME! -OK- " << endl;
fout << " >>> " << setw(6) << TEMP1[1].JOINT << setw(6) << TEMP1[3].JOINT << setw(6) << TEMP1[5].JOINT << setw(6) << TEMP1[7].JOINT << endl;
temp2 = 1;
}
//J1234面*************************************************************************************************************************************************************************
if(temp1==1&&temp2==1)//只有上面4点4点Y值全相等,才可以执行下面的计算,否则就是错的
{
Y1 = TEMP1[0].Y;
Y2 = TEMP1[1].Y;
DY = ABSD(Y1-Y2);//取节间高度

for(l=0;l<countb;l++)
{
DBJY = ABSD(BJ[l].YB - BJ[l].YE);
//杆件两头的端点的Y值有可能与Y1相等,有可能与Y2相等,也有可能都与Y1相等,也有可能都与Y2相等
if(((ABSD(BJ[l].YB-Y1)<0.0001)||(ABSD(BJ[l].YB-Y2)<0.0001))&&((ABSD(BJ[l].YE-Y1)<0.0001)||(ABSD(BJ[l].YE-Y2)<0.0001)))//JB,JE的Y要不与Y1相等,要不与Y2相等
{//这个判断,应该包括了,两端点上下的交叉材,两端点左右的横隔材
count++;
SEC[count-1].seq = BJ[l].seq; //count-1保证SEC[]从0开始
SEC[count-1].JB = BJ[l].JB;
SEC[count-1].JE = BJ[l].JE;
SEC[count-1].N = BJ[l].N;
SEC[count-1].ANGEL_STEEL = BJ[l].ANGEL_STEEL;
SEC[count-1].STEEL_TYPE = BJ[l].STEEL_TYPE;
SEC[count-1].LENGTH = BJ[l].LENGTH;
SEC[count-1].SEC_AREA = BJ[l].SEC_AREA;
SEC[count-1].SUR_AREA = BJ[l].SUR_AREA;
SEC[count-1].iy0 = BJ[l].iy0;
SEC[count-1].ix = BJ[l].ix;
SEC[count-1].r = BJ[l].r;
SEC[count-1].IS = BJ[l].IS;
SEC[count-1].TYPE = BJ[l].TYPE;
SEC[count-1].r = BJ[l].r;
SEC[count-1].M = BJ[l].M;
SEC[count-1].L1 = BJ[l].L1;
SEC[count-1].L2 = BJ[l].L2;
SEC[count-1].SMC = BJ[l].SMC;
SEC[count-1].XB = BJ[l].XB;
SEC[count-1].YB = BJ[l].YB;
SEC[count-1].ZB = BJ[l].ZB;
SEC[count-1].XE = BJ[l].XE;
SEC[count-1].YE = BJ[l].YE;
SEC[count-1].ZE = BJ[l].ZE;
}
else if((BJ[l].YB>Y2&&Y1>BJ[l].YB)||(BJ[l].YE>Y2&&Y1>BJ[l].YE)

count++;
SEC[count-1].seq = BJ[l].seq;
SEC[count-1].JB = BJ[l].JB;
SEC[count-1].JE = BJ[l].JE;
SEC[count-1].N = BJ[l].N;
SEC[count-1].ANGEL_STEEL = BJ[l].ANGEL_STEEL;
SEC[count-1].STEEL_TYPE = BJ[l].STEEL_TYPE;
SEC[count-1].LENGTH = BJ[l].LENGTH;
SEC[count-1].SEC_AREA = BJ[l].SEC_AREA;
SEC[count-1].SUR_AREA = BJ[l].SUR_AREA;
SEC[count-1].iy0 = BJ[l].iy0;
SEC[count-1].ix = BJ[l].ix;
SEC[count-1].r = BJ[l].r;
SEC[count-1].IS = BJ[l].IS;
SEC[count-1].TYPE = BJ[l].TYPE;
SEC[count-1].r = BJ[l].r;
SEC[count-1].M = BJ[l].M;
SEC[count-1].L1 = BJ[l].L1;
SEC[count-1].L2 = BJ[l].L2;
SEC[count-1].SMC = BJ[l].SMC;
SEC[count-1].XB = BJ[l].XB;
SEC[count-1].YB = BJ[l].YB;
SEC[count-1].ZB = BJ[l].ZB;
SEC[count-1].XE = BJ[l].XE;
SEC[count-1].YE = BJ[l].YE;
SEC[count-1].ZE = BJ[l].ZE;
}
}
fout << " No. JB JE" << endl;
for(m=0;m<count;m++)//输出刚才过滤后所有杆件,应该就是最后在那个面上的所有杆件了
fout << setw(7) << SEC[m].seq << setw(8) << SEC[m].JB << " -" << setw(5) << SEC[m].JE << endl;
fout << " >>> " << count << " MEMBERS in SECTION " << count_sec << "." << endl << endl;


fo << " No. JB JE" << endl;
for(m=0;m<count;m++)//输出刚才过滤后所有杆件,应该就是最后在那个面上的所有杆件了
fo << setw(7) << SEC[m].seq << setw(8) << SEC[m].JB << " -" << setw(5) << SEC[m].JE << endl;
fo << " >>> " << count << " MEMBERS in SECTION " << count_sec << "." << endl << endl;
count = 0;//归零,不然每次从上一次末尾存入

}

}
fout.close();
fo.close();


}


fo输出的跟fout输出的不一样
fout输出如下
fout输出是对的,fo是错的



...全文
191 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-08-18
  • 打赏
  • 举报
回复
乍看起来c++的cin、cout、ifstream、ofstream、istringstream、ostringstream在输入、输出上比c的scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf简单,不用格式控制符! 但是不用格式控制符,输入输出恰好是你期望的格式的时候好说;等到输入输出不是你期望的格式的时候,你就会觉得还是用格式控制符更方便、更靠谱。 摒弃cin、cout、ifstream、ofstream、istringstream、ostringstream! 使用scanf、printf、fscanf、fprintf、fread、fwrite、sscanf、sprintf。
jyxuan94 2016-08-18
  • 打赏
  • 举报
回复
找到了就好_(:зゝ∠)_感觉经常自己给自己挖坑跳
小灸舞 2016-08-18
  • 打赏
  • 举报
回复
帮结帖
mechanicser 2016-08-18
  • 打赏
  • 举报
回复
我已经知道了,外面调用函数的循环每次打开把以前写的冲掉了,只保留了最后一次的结果
mechanicser 2016-08-17
  • 打赏
  • 举报
回复
这是fout输出



这是fo输出

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧