C语言中如何用break语句退出多重循环

例如把这题用break语句退出#include<stdio.h>
#include<math.h>
void gede(long k);
long sushu(long c);
void main()
{long k;
printf("请输入一个大偶数:");
scanf("%d",&k);
gede(k);}
void gede(long k)
{long i,j;
for(i=1;i<k;i++)
for(j=1;j<k;j++)
if(i+j==k&&sushu(i)&&sushu(j))goto bottom;
bottom:printf("两个素数为%d和%d\n",i,j);}
long sushu(long c)
{int a;double b;
b=sqrt(c);
for(a=2;a<=b;a++)
if(c%a==0)return 0;
if(a>b)return 1;}

  break语句退出循环时,它将退出离它最近的那层循环。比如下面的代码,定义一个两维数组,不希望输出第2行。

#include<stdio.h>
int main()

int a[3][3] = { {1,2,3}, //第一行
              {4,5,6},   //第二行
              {7,8,9}    //第三行
};
for (int i=0; i!=3; ++i) {
for (int j=0; j!=3; ++j)
{
if (a[i][j] == 4) break; //进入第二行时break跳出,只跳出离它最近的for循环
printf("%d\n", a[i][j]);
}
}
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-04
//这个题最好用return,为了符合你的要求,还是用了两个break实现。
//注意1不是是素数。
#include<stdio.h>
#include<math.h>
void gede(long k);
long sushu(long c);
void main()
{long k;
printf("请输入一个大偶数:");
scanf("%d",&k);
gede(k);}
void gede(long k)
{
long i,j;
for(i=1;i<k;i++)
{
for(j=1;j<k;j++)
if(i+j==k&&sushu(i)&&sushu(j))
{
printf("两个素数为%d和%d\n",i,j);
break;//退出内循环。当然这儿最好是用retun;直接返回,后面的if(j<k)break;也不要了!
}
if(j<k)break;//退出外循环!
}
}
long sushu(long c)
{
int a;double b;
if(c<2)return 0;//加这行,因为1不是素数!
b=sqrt((double)c);
for(a=2;a<=b;a++)
if(c%a==0)return 0;
if(a>b)return 1;
}本回答被提问者采纳
第2个回答  2011-04-07
C语言中break语句只能跳出它所处的那一层循环。
要跳出多重循环,必须使用多个 break。
第3个回答  2011-04-07
在这个循环里面加break
for(i=1;i<k;i++)
for(j=1;j<k;j++)
if(i+j==k&&sushu(i)&&sushu(j))
{
goto bottom;
break;
}
bottom:printf("两个素数为%d和%d\n",i,j);}

不过加不加都会执行bottom的,你程序要改改了
第4个回答  2011-04-07
跳出调用函数的话不要用break比较好吧,一层层跳出很蛋疼容易错啊