如何用循环改掉GOTO呀?高手指教!
#include <stdio.h>
void main()
{
const int N=4;
unsigned int s[N],d[N],e[N];
int p,q,r,i,k;
s[0]=s[1]=1;
for(i=2;i <N;++i)
{
s[i]=d[i]=i;
e[i]=-1;
}
loop:
{
q=0;
for(i=1;i <N;++i)printf( "%d ",s[i]);
printf( "\n ");
for(k=N-1;k> =2;--k)
{
d[k]=d[k]+e[k];
p=d[k];
if(p==k)
e[k]=-1;
else if(p==0)
{
e[k]=1;++q;
}
else
{
p+=q;r=s[p];s[p]=s[p+1];s[p+1]=r;
goto loop;
}
}
}
}
[解决办法]
int main ()
{
const int N=4;
int flag=1;
unsigned int s[N],d[N],e[N];
int p,q,r,i,k;
s[0]=s[1]=1;
for(i=2;i <N;++i)
{
s[i]=d[i]=i;
e[i]=-1;
}
do
{
q=0;
for(i=1;i <N;++i)printf( "%d ",s[i]);
printf( "\n ");
for(k=N-1;k> =2;--k)
{
d[k]=d[k]+e[k];
p=d[k];
if(p==k)
e[k]=-1;
else if(p==0)
{
e[k]=1;++q;
}
else
{
p+=q;r=s[p];s[p]=s[p+1];s[p+1]=r;
break;
}
}
if(k <2)
flag=0;
}
while(flag==1);
return 0;
}
[解决办法]
goto就是一个do while
[解决办法]
我用FOR,不带标志做的:
#include <stdio.h>
void main ()
{
const int N=5;
unsigned int s[N],d[N],e[N];
int p,q,r,i,k;
s[0]=s[1]=1;
for(i=2;i <N;++i)
{
s[i]=d[i]=i;e[i]=-1;
}
for(;;)
{
q=0;
for(i=1;i <N;++i)printf( "%d ",s[i]);
printf( "\n ");
for(k=N-1;k> =2;--k)
{
d[k]=d[k]+e[k];
p=d[k];
if(p==k)
e[k]=-1;
else if(p==0)
{
e[k]=1;++q;
}
else
{
p+=q;r=s[p];s[p]=s[p+1];s[p+1]=r;
break;
}
}
if(k <2)
break;
}
}