为什么嵌套的for循环不执行?

qjcrue 2012-01-06 06:06:37
void PrintNeutronData(vector<Neutron> empSet,string path)
{
vector<Neutron> SumNeutrondata;
Neutron sum;
ofstream outfile(path);
if(!outfile){
cerr<<"open error!"<<endl;
exit(1);
}
outfile<<titleNeutron<<endl;

sum.A=empSet[0].A;
sum.Z=empSet[0].Z;
sum.Isomer=empSet[0].Isomer;
sum.LiBName=empSet[0].LiBName;
sum.MT=00;
sum.Qvalue=empSet[0].Qvalue;
sum.E2200ms=0;
sum.Emaxw=0;
sum.E05MeV=0;
sum.F05MeV=0;
sum.E2MeV=0;
sum.F2MeV=0;
sum.E4MeV=0;
sum.E8MeV=0;
sum.E145MeV=0;
sum.E20MeV=0;
for(vector<int>::size_type j = 0; j< empSet.size()&&(empSet[0].A==empSet[j].A)&&(empSet[0].Z==empSet[j].Z); j++)
{

sum.E2200ms=sum.E2200ms+empSet[j].E2200ms;
sum.Emaxw=sum.Emaxw+empSet[j].Emaxw;
sum.E05MeV=sum.E05MeV+empSet[j].E05MeV;
sum.F05MeV=sum.F05MeV+empSet[j].F05MeV;
sum.E2MeV=sum.E2MeV+empSet[j].E2MeV;
sum.F2MeV=sum.F2MeV+empSet[j].F2MeV;
sum.E4MeV=sum.E4MeV+empSet[j].E4MeV;
sum.E8MeV=sum.E8MeV+empSet[j].E8MeV;
sum.E145MeV=sum.E145MeV+empSet[j].E145MeV;
sum.E20MeV=sum.E20MeV+empSet[j].E20MeV;
}
SumNeutrondata.push_back(sum);
outfile<<setw(3)<<empSet[0].A<<" "<<setw(3)<<empSet[0].Z<<" "<<setw(2)<<empSet[0].Isomer<<" "<<setw(13)<<empSet[0].LiBName<<" "<<setw(5)<<empSet[0].MT<<" "<<setw(12)<<empSet[0].Qvalue<<" "<<setw(13)<<empSet[0].E2200ms<<" "<<setw(12)<<empSet[0].Emaxw<<" "<<setw(13)<<empSet[0].E05MeV<<" "<<setw(13)<<empSet[0].F05MeV<<" "<<setw(13)<<empSet[0].E2MeV<<" "<<setw(13)<<empSet[0].F2MeV<<" "<<setw(13)<<empSet[0].E4MeV<<" "<<setw(13)<<empSet[0].E8MeV<<" "<<setw(13)<<empSet[0].E145MeV<<" "<<setw(13)<<empSet[0].E20MeV<<" "<<endl;


for(vector<int>::size_type i=1;i<empSet.size();i++)
{
sum.A=empSet[i].A;
sum.Z=empSet[i].Z;
sum.Isomer=empSet[i].Isomer;
sum.LiBName=empSet[i].LiBName;
sum.MT=0;
sum.Qvalue=empSet[i].Qvalue;
sum.E2200ms=0;
sum.Emaxw=0;
sum.E05MeV=0;
sum.F05MeV=0;
sum.E2MeV=0;
sum.F2MeV=0;
sum.E4MeV=0;
sum.E8MeV=0;
sum.E145MeV=0;
sum.E20MeV=0;
if((empSet[i].A!=empSet[i-1].A)||(empSet[i].Z!=empSet[i-1].Z))
{

for(vector<int>::size_type j = 0; j< empSet.size()&&(empSet[i].A==empSet[j].A)&&(empSet[i].Z==empSet[j].Z); j++)
{
sum.E2200ms=sum.E2200ms+empSet[j].E2200ms;
sum.Emaxw=sum.Emaxw+empSet[j].Emaxw;
sum.E05MeV=sum.E05MeV+empSet[j].E05MeV;
sum.F05MeV=sum.F05MeV+empSet[j].F05MeV;
sum.E2MeV=sum.E2MeV+empSet[j].E2MeV;
sum.F2MeV=sum.F2MeV+empSet[j].F2MeV;
sum.E4MeV=sum.E4MeV+empSet[j].E4MeV;
sum.E8MeV=sum.E8MeV+empSet[j].E8MeV;
sum.E145MeV=sum.E145MeV+empSet[j].E145MeV;
sum.E20MeV=sum.E20MeV+empSet[j].E20MeV;

}
SumNeutrondata.push_back(sum);
}

outfile<<setw(3)<<empSet[i].A<<" "<<setw(3)<<empSet[i].Z<<" "<<setw(2)<<empSet[i].Isomer<<" "<<setw(13)<<empSet[i].LiBName<<" "<<setw(5)<<empSet[i].MT<<" "<<setw(12)<<empSet[i].Qvalue<<" "<<setw(13)<<empSet[i].E2200ms<<" "<<setw(12)<<empSet[i].Emaxw<<" "<<setw(13)<<empSet[i].E05MeV<<" "<<setw(13)<<empSet[i].F05MeV<<" "<<setw(13)<<empSet[i].E2MeV<<" "<<setw(13)<<empSet[i].F2MeV<<" "<<setw(13)<<empSet[i].E4MeV<<" "<<setw(13)<<empSet[i].E8MeV<<" "<<setw(13)<<empSet[i].E145MeV<<" "<<setw(13)<<empSet[i].E20MeV<<" "<<endl;
}
//output the sum neutron cross section of the every nuclear
outfile<<endl<<endl<<"output the sum of the neutron cross section for each nuclear"<<endl<<endl;
outfile<<titleNeutron<<endl;
for(vector<int>::size_type i = 0; i< SumNeutrondata.size(); i++)
{

outfile<<setw(3)<<SumNeutrondata[i].A<<" "<<setw(3)<<SumNeutrondata[i].Z<<" "<<setw(2)<<SumNeutrondata[i].Isomer<<" "<<setw(13)<<SumNeutrondata[i].LiBName<<" "<<setw(5)<<SumNeutrondata[i].MT<<" "<<setw(12)<<SumNeutrondata[i].Qvalue<<" "<<setw(13)<<SumNeutrondata[i].E2200ms<<" "<<setw(12)<<SumNeutrondata[i].Emaxw<<" "<<setw(13)<<SumNeutrondata[i].E05MeV<<" "<<setw(13)<<SumNeutrondata[i].F05MeV<<" "<<setw(13)<<SumNeutrondata[i].E2MeV<<" "<<setw(13)<<SumNeutrondata[i].F2MeV<<" "<<setw(13)<<SumNeutrondata[i].E4MeV<<" "<<setw(13)<<SumNeutrondata[i].E8MeV<<" "<<setw(13)<<SumNeutrondata[i].E145MeV<<" "<<setw(13)<<SumNeutrondata[i].E20MeV<<" "<<endl;
}

}
编译没问题 但是for(vector<int>::size_type i=1;i<empSet.size();i++)
中的嵌套的for(vector<int>::size_type j = 0; j< empSet.size()&&(empSet[i].A==empSet[j].A)&&(empSet[i].Z==empSet[j].Z); j++)
却不进去执行 请个位给分析一下哈!
...全文
251 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yafeng_jiang 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qjcrue 的回复:]

把嵌套的for(vector<int>::size_type j = 0; j< empSet.size()&&(empSet[i].A==empSet[j].A)&&(empSet[i].Z==empSet[j].Z); j++)换成for(vector<int>::size_type j = 0; j< empSet.size()&&(empS……
[/Quote]

前面的不是应该等价于
for(vector<int>::size_type j = 0; j< empSet.size()&&(empSet[1].A==empSet[j].A)&&(empSet[1].Z==empSet[j].Z); j++)吗?当第一次进入循环的时候
qjcrue 2012-01-06
  • 打赏
  • 举报
回复
A    Z   I      LiB-Name    MT      Q-value       2200M/S     MAXW.AVE        0.5MeV       Fiss<0.5>          2.0MeV       Fiss<2.0>          4.0MeV          8.0MeV         14.5MeV         20.0MeV
143 58 0 ENDF/B-7.0 16 -5.144 0 0 0 6.32279e-008 0 0.0234268 0 1.09364 1.642 0.509246
143 58 0 ENDF/B-7.0 17 -12.313 0 0 0 0 0 3.95165e-005 0 0 0.159854 1.28744
143 58 0 ENDF/B-7.0 22 0.878 0 0 0 0 0 3.40102e-007 0 1.56597e-006 0.000848508 0.00556141
143 58 0 ENDF/B-7.0 28 -8.866 0 0 0 0 0 3.85724e-008 0 0 4.14916e-005 0.00676385
143 58 0 ENDF/B-7.0 102 6.896 6.00267 5.901 0.00858214 0.0172539 0.00509794 0.00674437 0.00130034 0.000224969 0.000474901 9.66381e-005
143 58 0 ENDF/B-7.0 103 0 0 0 0 0 0 9.83266e-007 0 6.26903e-007 0.0028356 0.0137225
143 58 0 ENDF/B-7.0 107 0 0 0 2.49441e-007 4.75305e-007 2.62467e-006 4.54995e-006 7.77031e-006 4.29309e-005 0.001386 0.00160589
144 58 0 ENDF/B-7.0 16 -6.8971 0 0 0 0 0 0.0125552 0 0.730946 1.37455 0.222662
144 58 0 ENDF/B-7.0 17 -12.0482 0 0 0 0 0 0.000132074 0 0 0.730007 1.9082
144 58 0 ENDF/B-7.0 22 0.432094 0 0 0 0 0 1.61712e-007 0 1.41549e-006 0.000368898 0.00467183
144 58 0 ENDF/B-7.0 28 -9.41463 0 0 0 0 0 1.60365e-008 0 0 1.05083e-006 0.00369747
144 58 0 ENDF/B-7.0 102 4.76039 1.00039 0.98895 0.0067401 0.0106351 0.00650936 0.00633884 0.00295087 0.000267194 0.00100119 0.00115282
144 58 0 ENDF/B-7.0 103 -4.71852 0 0 0 0 0 5.60984e-007 0 0 0.00197984 0.0126601
144 58 0 ENDF/B-7.0 104 -7.10451 0 0 0 0 0 7.31648e-008 0 0 6.85188e-005 0.0108884
144 58 0 ENDF/B-7.0 105 -7.28746 0 0 0 0 0 6.41055e-008 0 0 0.000101851 0.00684231
144 58 0 ENDF/B-7.0 107 5.20319 0 0 0 0 1.49681e-008 1.82322e-006 2.02277e-006 3.7967e-005 0.000909396 0.00152282
145 58 0 TENDL-2010 16 -4.73117 0 0 0 3.17685e-007 0 0.0453389 0 1.62299 1.22923 0.400757
145 58 0 TENDL-2010 17 -11.6275 0 0 0 0 0 0.000123627 0 0 0.621947 1.36456
qjcrue 2012-01-06
  • 打赏
  • 举报
回复
抱歉哈
void PrintNeutronData(vector<Neutron> empSet,string path)
{
vector<Neutron> SumNeutrondata;
Neutron sum;
ofstream outfile(path);
if(!outfile){
cerr<<"open error!"<<endl;
exit(1);
}
outfile<<titleNeutron<<endl;

sum.A=empSet[0].A;
sum.Z=empSet[0].Z;
sum.Isomer=empSet[0].Isomer;
sum.LiBName=empSet[0].LiBName;
sum.MT=00;
sum.Qvalue=empSet[0].Qvalue;
sum.E2200ms=0;
sum.Emaxw=0;
sum.E05MeV=0;
sum.F05MeV=0;
sum.E2MeV=0;
sum.F2MeV=0;
sum.E4MeV=0;
sum.E8MeV=0;
sum.E145MeV=0;
sum.E20MeV=0;
for(vector<int>::size_type j = 0; j< empSet.size()&&(empSet[0].A==empSet[j].A)&&(empSet[0].Z==empSet[j].Z); j++)
{

sum.E2200ms=sum.E2200ms+empSet[j].E2200ms;
sum.Emaxw=sum.Emaxw+empSet[j].Emaxw;
sum.E05MeV=sum.E05MeV+empSet[j].E05MeV;
sum.F05MeV=sum.F05MeV+empSet[j].F05MeV;
sum.E2MeV=sum.E2MeV+empSet[j].E2MeV;
sum.F2MeV=sum.F2MeV+empSet[j].F2MeV;
sum.E4MeV=sum.E4MeV+empSet[j].E4MeV;
sum.E8MeV=sum.E8MeV+empSet[j].E8MeV;
sum.E145MeV=sum.E145MeV+empSet[j].E145MeV;
sum.E20MeV=sum.E20MeV+empSet[j].E20MeV;
}
SumNeutrondata.push_back(sum);
outfile<<setw(3)<<empSet[0].A<<" "<<setw(3)<<empSet[0].Z<<" "<<setw(2)<<empSet[0].Isomer<<" "<<setw(13)<<empSet[0].LiBName<<" "<<setw(5)<<empSet[0].MT<<" "<<setw(12)<<empSet[0].Qvalue<<" "<<setw(13)<<empSet[0].E2200ms<<" "<<setw(12)<<empSet[0].Emaxw<<" "<<setw(13)<<empSet[0].E05MeV<<" "<<setw(13)<<empSet[0].F05MeV<<" "<<setw(13)<<empSet[0].E2MeV<<" "<<setw(13)<<empSet[0].F2MeV<<" "<<setw(13)<<empSet[0].E4MeV<<" "<<setw(13)<<empSet[0].E8MeV<<" "<<setw(13)<<empSet[0].E145MeV<<" "<<setw(13)<<empSet[0].E20MeV<<" "<<endl;


for(vector<int>::size_type i=1;i<empSet.size();i++)
{
sum.A=empSet[i].A;
sum.Z=empSet[i].Z;
sum.Isomer=empSet[i].Isomer;
sum.LiBName=empSet[i].LiBName;
sum.MT=0;
sum.Qvalue=empSet[i].Qvalue;
sum.E2200ms=0;
sum.Emaxw=0;
sum.E05MeV=0;
sum.F05MeV=0;
sum.E2MeV=0;
sum.F2MeV=0;
sum.E4MeV=0;
sum.E8MeV=0;
sum.E145MeV=0;
sum.E20MeV=0;
if((empSet[i].A!=empSet[i-1].A)||(empSet[i].Z!=empSet[i-1].Z))
{

for(vector<int>::size_type j = 0; j< empSet.size()&&(empSet[i].A==empSet[j].A)&&(empSet[i].Z==empSet[j].Z); j++)
{
sum.E2200ms=sum.E2200ms+empSet[j].E2200ms;
sum.Emaxw=sum.Emaxw+empSet[j].Emaxw;
sum.E05MeV=sum.E05MeV+empSet[j].E05MeV;
sum.F05MeV=sum.F05MeV+empSet[j].F05MeV;
sum.E2MeV=sum.E2MeV+empSet[j].E2MeV;
sum.F2MeV=sum.F2MeV+empSet[j].F2MeV;
sum.E4MeV=sum.E4MeV+empSet[j].E4MeV;
sum.E8MeV=sum.E8MeV+empSet[j].E8MeV;
sum.E145MeV=sum.E145MeV+empSet[j].E145MeV;
sum.E20MeV=sum.E20MeV+empSet[j].E20MeV;

}
SumNeutrondata.push_back(sum);
}

outfile<<setw(3)<<empSet[i].A<<" "<<setw(3)<<empSet[i].Z<<" "<<setw(2)<<empSet[i].Isomer<<" "<<setw(13)<<empSet[i].LiBName<<" "<<setw(5)<<empSet[i].MT<<" "<<setw(12)<<empSet[i].Qvalue<<" "<<setw(13)<<empSet[i].E2200ms<<" "<<setw(12)<<empSet[i].Emaxw<<" "<<setw(13)<<empSet[i].E05MeV<<" "<<setw(13)<<empSet[i].F05MeV<<" "<<setw(13)<<empSet[i].E2MeV<<" "<<setw(13)<<empSet[i].F2MeV<<" "<<setw(13)<<empSet[i].E4MeV<<" "<<setw(13)<<empSet[i].E8MeV<<" "<<setw(13)<<empSet[i].E145MeV<<" "<<setw(13)<<empSet[i].E20MeV<<" "<<endl;
}
//output the sum neutron cross section of the every nuclear
outfile<<endl<<endl<<"output the sum of the neutron cross section for each nuclear"<<endl<<endl;
outfile<<titleNeutron<<endl;
for(vector<int>::size_type i = 0; i< SumNeutrondata.size(); i++)
{

outfile<<setw(3)<<SumNeutrondata[i].A<<" "<<setw(3)<<SumNeutrondata[i].Z<<" "<<setw(2)<<SumNeutrondata[i].Isomer<<" "<<setw(13)<<SumNeutrondata[i].LiBName<<" "<<setw(5)<<SumNeutrondata[i].MT<<" "<<setw(12)<<SumNeutrondata[i].Qvalue<<" "<<setw(13)<<SumNeutrondata[i].E2200ms<<" "<<setw(12)<<SumNeutrondata[i].Emaxw<<" "<<setw(13)<<SumNeutrondata[i].E05MeV<<" "<<setw(13)<<SumNeutrondata[i].F05MeV<<" "<<setw(13)<<SumNeutrondata[i].E2MeV<<" "<<setw(13)<<SumNeutrondata[i].F2MeV<<" "<<setw(13)<<SumNeutrondata[i].E4MeV<<" "<<setw(13)<<SumNeutrondata[i].E8MeV<<" "<<setw(13)<<SumNeutrondata[i].E145MeV<<" "<<setw(13)<<SumNeutrondata[i].E20MeV<<" "<<endl;
}

}
qjcrue 2012-01-06
  • 打赏
  • 举报
回复
把嵌套的for(vector<int>::size_type j = 0; j< empSet.size()&&(empSet[i].A==empSet[j].A)&&(empSet[i].Z==empSet[j].Z); j++)换成for(vector<int>::size_type j = 0; j< empSet.size()&&(empSet[0].A==empSet[j].A)&&(empSet[0].Z==empSet[j].Z); j++)
就可以进入循环 真是奇怪
善良超锅锅 2012-01-06
  • 打赏
  • 举报
回复
代码 太长了,发帖时,把代码插在
之间

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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