主题:如何跳出内循环进入下一个外循环?多谢!!!
wangtao88
[专家分:0] 发布于 2011-01-28 21:20:00
求助:当大于或等于4码时输出并跳出内循环进入到外循环的下一次循环对比。
void abc11(int a[][5],int jbb2z)
{
int i,j,counter,s,sum,AA;
FILE *pf;
if((pf=fopen("e:\\zFILE522_003z.txt","w"))==NULL)
{
printf("Cannot open1 file!");
return;
}
for(i=0;i<jbb2z;i++)
{
for(s=0;s<okok;s++)
{
AA=0;
for(j=0;j<5;j++)
{
if(b[s][j]==a[i][j]) //a数组和b数组对比
AA++; //有相同的就记数
if(AA>=4)
for(j=0;j<5;j++)
a[i][j]=b[s][j];//有等于大于4个数同的将b数组赋予a数组
break; //跳出内循环转入下一个外循环
}
}
{
for(j=0;j<5;j++)
fprintf(pf,"%4d",a[i][j]);
fprintf(pf,"\n");
jtyyk++;
}
}
fclose(pf);
}
回复列表 (共6个回复)
沙发
eastcowboy [专家分:25370] 发布于 2011-01-28 21:35:00
不要写这么多层的循环,当循环太多时,做成函数。
修改如下。
[quote]函数f:
for (XX2)
for (XX3)
if (XX4)
return;
主函数:
for (XX1)
调用f[/quote]
板凳
wangtao88 [专家分:0] 发布于 2011-01-28 21:45:00
使用:goto loop后输出也不对,程序中并没有把b数组赋给a数组。郁闷
void abc11(int a[][5],int jbb2z)
{
int i,j,counter,s,sum,AA;
FILE *pf;
if((pf=fopen("e:\\zFILE522_003z.txt","w"))==NULL)
{
printf("Cannot open1 file!");
return;
}
for(i=0;i<jbb2z;i++)
{
for(s=0;s<okok;s++)
{
AA=0;
for(j=0;j<5;j++)
{
if(b[s][j]==a[i][j]) //a数组和b数组对比
AA++; //有相同的就记数
if(AA>=4)
for(j=0;j<5;j++)
a[i][j]=b[s][j];//有等于大于4个数同的将b数组赋予a数组
goto loop; //跳出内循环转入下一个外循环
}
}
loop:
{
for(j=0;j<5;j++)
fprintf(pf,"%4d",a[i][j]);
fprintf(pf,"\n");
jtyyk++;
}
}
fclose(pf);
}
3 楼
eastcowboy [专家分:25370] 发布于 2011-01-29 09:28:00
几个要注意的地方:
1、每层循环应该使用不同的变量。楼主代码:
[quote]for(j=0;j<5;j++)
{
if(b[s][j]==a[i][j]) //a数组和b数组对比
AA++; //有相同的就记数
if(AA>=4)
for(j=0;j<5;j++)[/quote]
两层循环都是用j,这样就乱了。
2、记得打括号{}。楼主代码:
[quote]if(AA>=4)
for(j=0;j<5;j++)
a[i][j]=b[s][j];//有等于大于4个数同的将b数组赋予a数组
goto loop; //跳出内循环转入下一个外循环[/quote]
这里不论if是否成立,都会执行goto。是不是应该修改一下,把for和goto用{}括起来?
楼主可以先学习一下如何进行单步调试,看看程序到底是怎样一步一步执行的。这在初学时很有好处,磨刀不误砍柴工。另外,一定要注意程序代码的格式,要写得整齐,便于自己和别人的阅读。
4 楼
windy0will [专家分:2300] 发布于 2011-01-29 17:09:00
如果循环层数太多了,按2楼的说的写成函数要好得很多。
但lz给的这段代码的数据很特别,内循环只有5次,可以考虑直接展开循环。并且里面的
AA>=4.这也是1个特别的地方,刚好比5少1.如果不考虑可读性的话,写成下面这样子,可能效率要稍微好点。
[code=c]
void
abc11 (int a[][5], int jbb2z)
{
int i, j, s, AA;
FILE *pf = fopen ("e:\\zFILE522_003z.txt", "w");
if (pf == NULL) {
printf ("Cannot open1 file!");
return;
}
for (i = 0; i < jbb2z; i++)
for (s = 0; s < okok; s++)
{
register int eq, *pa = a[i];
int which, *pb = b[s];
#define FOO(n) (eq=pb[n]==pa[n], AA+=eq, whitch|=(eq-1)&n)
AA = 0; which = 0;
FOO(0); FOO(1);
FOO(2); FOO(3); FOO(4);
if (AA >= 4)
{
pa[which] = pb[which];
jtyyk ++;
fprintf (pf, "%4d%4d%4d%4d%4d",
pa[0], pa[1], pa[2], pa[3], pa[4]);
}
}
fclose(pf);
}
[/code]
5 楼
wangtao88 [专家分:0] 发布于 2011-01-29 21:47:00
谢谢楼上“windy0will”的耐心赐教,看到你写的代码我真的很佩服也很惭愧。感到差距好大!
我在VC6.0上把你写的代码编译,但提示出错了。
以下是VC6.0的错误提示?s
C2065: 'whitch' : undeclared identifier
6 楼
windy0will [专家分:2300] 发布于 2011-01-30 17:36:00
不好意思,英语太烂了,把单词拼错了,哪一个应该是which,这个变量记录的是数组pa和数组pb中哪一个是不同的下标。AA>=4,也就是说只能是4或5:4的时候只要把不同的pb[which]赋值给pa[which];5的时候which等于0,反证都相同,赋一次值也没关系。
我来回复