C语言GOTO问题,为什么if条件不成立了还会执行GOTO语句,各位帮我看看代码,谢谢
#include<stdio.h>intmain(){intn,m,i;inttop,tail,front,back;scanf("%d\n",&n);for(i=0;i...
#include <stdio.h>
int main()
{
int n,m,i;
int top,tail,front,back;
scanf("%d\n",&n);
for (i=0;i<n;i++)
{
scanf("%d\n",&m);
int a[100][100];
for (int j=0;j<m;j++)
{
for (int k=0;k<m;k++)
scanf("%d",&a[j][k]);
}
//printf("dont liesh");
for(j=0;j<m;j++)
{
front=0,back= m-1;
while(front<back)
{
if(a[j][front]!=a[j][back])//左右对折
goto st;
front++,back--;
}
for(top=0,tail=m-1;top<tail;top++,tail--)
{
if(a[top][j]!=a[tail][j])
goto st;
}
if (top==tail && j==m-1 )
{
printf("YES\n");
}
}
st:
printf("NO\n");
}
return 0;
} 展开
int main()
{
int n,m,i;
int top,tail,front,back;
scanf("%d\n",&n);
for (i=0;i<n;i++)
{
scanf("%d\n",&m);
int a[100][100];
for (int j=0;j<m;j++)
{
for (int k=0;k<m;k++)
scanf("%d",&a[j][k]);
}
//printf("dont liesh");
for(j=0;j<m;j++)
{
front=0,back= m-1;
while(front<back)
{
if(a[j][front]!=a[j][back])//左右对折
goto st;
front++,back--;
}
for(top=0,tail=m-1;top<tail;top++,tail--)
{
if(a[top][j]!=a[tail][j])
goto st;
}
if (top==tail && j==m-1 )
{
printf("YES\n");
}
}
st:
printf("NO\n");
}
return 0;
} 展开
1个回答
展开全部
scanf("%d\n",&n);//这是第一个问题,如果你里边加了\n 需要敲输入两次数据且回车才能读入第一个数据,并将后一个数据存入STDIN的缓存给下一个输入数据.
第2 :虽然程序写的有点乱但是还是懂了,应该是判断一个2维数组是不是左右上下对称的,结果应该是打印了很多次YES之后还是执行了NO了是不,因为你就算条件全部都不执行GOTO语句,顺序执行也会执行到ST为标号的那句的,因为不知道具体题意,按照自己的理解给改了一下。试一下看可以不
int main()
{
int n,m,i;
int top,tail,front,back;
scanf("%d",&n);
for (i=0;i<n;i++)
{
scanf("%d",&m);
int a[100][100];
for (int j=0;j<m;j++)
{
for (int k=0;k<m;k++)
scanf("%d",&a[j][k]);
}
//printf("dont liesh");
for(j=0;j<m;j++)
{
front=0,back= m-1;
while(front<back)
{
if(a[j][front]!=a[j][back])//左右对折
goto st;
front++,back--;
}
for(top=0,tail=m-1;top<tail;top++,tail--)
{
if(a[top][j]!=a[tail][j])
goto st;
}
if (top==tail && j==m-1 )
{
printf("YES\n");
}
}
continue;//结束本次循环不执行下面的语句
st:
printf("NO\n");
}
return 0;
}
有问题可以HI我
第2 :虽然程序写的有点乱但是还是懂了,应该是判断一个2维数组是不是左右上下对称的,结果应该是打印了很多次YES之后还是执行了NO了是不,因为你就算条件全部都不执行GOTO语句,顺序执行也会执行到ST为标号的那句的,因为不知道具体题意,按照自己的理解给改了一下。试一下看可以不
int main()
{
int n,m,i;
int top,tail,front,back;
scanf("%d",&n);
for (i=0;i<n;i++)
{
scanf("%d",&m);
int a[100][100];
for (int j=0;j<m;j++)
{
for (int k=0;k<m;k++)
scanf("%d",&a[j][k]);
}
//printf("dont liesh");
for(j=0;j<m;j++)
{
front=0,back= m-1;
while(front<back)
{
if(a[j][front]!=a[j][back])//左右对折
goto st;
front++,back--;
}
for(top=0,tail=m-1;top<tail;top++,tail--)
{
if(a[top][j]!=a[tail][j])
goto st;
}
if (top==tail && j==m-1 )
{
printf("YES\n");
}
}
continue;//结束本次循环不执行下面的语句
st:
printf("NO\n");
}
return 0;
}
有问题可以HI我
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询