if语句中break用法

小菜一枚 2012-10-09 08:10:30
说是break会直接跳出最内层的循环或switch语句块,不理睬if语句,那么如下程序,则是若为真直接跳出for循环,执行printf("\n")
int main()
{
int m,n,res,i;
printf("输入被除数和除数:");
scanf("%d%d",&m,&n);
printf("%d.",m/n);//先输出整数部分和小数点
res=m%n;//取余数
for(i=0;i<Max;i++)
{
res*=10;//余数乘10
printf("%d",res/n);// 余数乘10后再与除数相除,输出第i+1位小数
res=res%n;//取余数
if(0==res)//若为真直接跳出for循环,执行printf("\n")
{
break;
}
}
printf("\n");
return 0;
}

若是如下呢,if为真时,break跳到哪里?
int main()
{
for(i=0;i<Max;i++)
{
while(...)
{
if(0==res)//余数为0时说明除法结束,并退出,否则输出Max位小数
{
break;
}
printf("A");
}
printf("B");
}
printf("\n");
return 0;
}

2.不好意思哈~还有个问题比较迷糊:
若break在if语句的else中,是不是也直接跳出最内层循环,如下例中跳出
for(int i = nLength - 1; i >= 0; i --)
bool Increment(char* number)

{

bool isOverflow = false;

int nTakeOver = 0;

int nLength = strlen(number);
for(int i = nLength - 1; i >= 0; i --)

{

int nSum = number[i] - '0' + nTakeOver;

if(i == nLength - 1)

nSum ++;

if(nSum >= 10)

{

if(i == 0)

isOverflow = true;

else

{

nSum -= 10;

nTakeOver = 1;

number[i] = '0' + nSum;

}

}

else

{

number[i] = '0' + nSum;

break;

}

}


return isOverflow;

}
...全文
58568 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
JawSoW 2015-04-26
  • 打赏
  • 举报
回复
调试才是最重要的
xiaoyongjun2003 2013-07-30
  • 打赏
  • 举报
回复 1
尝试后发现 break 只能跳出循环(最内层) 甭管里面有几个if嵌套
thomas_2012 2012-11-26
  • 打赏
  • 举报
回复 8
break语句事实上跳出的是最近的那层循环语句或者switch语句。特别注意的是if不是循环语句。
小菜一枚 2012-10-12
  • 打赏
  • 举报
回复 1
[Quote=引用 20 楼 的回复:]
引用 8 楼 的回复:

记住一句话,break;只管循环,不管if的,与if没关系。所以break只跳循环,第一个跳while第二个跳if。


呵呵,你都说跟if无关了,还“第二个跳if”啊?呵呵,打错了吧?
[/Quote]

赞成你说的
guopeng111111 2012-10-10
  • 打赏
  • 举报
回复
跳出对应的if那一层循环
wanglu343280746 2012-10-10
  • 打赏
  • 举报
回复
单步调试一下什么都明白了
huhaifengasd 2012-10-10
  • 打赏
  • 举报
回复
if不属于循环,这是判断语句。
喝牛奶的熊 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

记住一句话,break;只管循环,不管if的,与if没关系。所以break只跳循环,第一个跳while第二个跳if。
[/Quote]

呵呵,你都说跟if无关了,还“第二个跳if”啊?呵呵,打错了吧?
赵4老师 2012-10-10
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
gaoyang2 2012-10-10
  • 打赏
  • 举报
回复
break 跳出跟它最近的一出循环,continue则是到下次循环
hu7324829 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

单步调试一下什么都明白了
[/Quote]
++
还是用单步调试比较好
龙泉剑 2012-10-10
  • 打赏
  • 举报
回复
break是跳出最内层的循环(while,for)或switch,if什么的跟他无关
zhaoming262350 2012-10-09
  • 打赏
  • 举报
回复 1
break 在哪一层循环中,跳出哪一个循环;
while(...)
{
if(0==res)//余数为0时说明除法结束,并退出,否则输出Max位小数
{
break;
}
printf("A");
}
printf("B");
break ,跳出内层循环,所以不能执行 printf(“\n”);
直接跳出循环执行printf(“B”);
AndyZhang 2012-10-09
  • 打赏
  • 举报
回复
你只需要看看break属于哪个最里面的循环,就跳出谁,只跳出一次,其他继续
大熊猫侯佩 2012-10-09
  • 打赏
  • 举报
回复
这个问题仿佛可以用实践来解决
dancool2006 2012-10-09
  • 打赏
  • 举报
回复
break应该是跳出本层循环,goto可以跳出多重循环
armsword 2012-10-09
  • 打赏
  • 举报
回复
记住一句话,break;只管循环,不管if的,与if没关系。所以break只跳循环,第一个跳while第二个跳if。

manxiSafe 2012-10-09
  • 打赏
  • 举报
回复 1
break其作用大多情况下是终止上一层的循环,以C语言来说,break在switch(开关语句)中在执行一条case后跳出语句的作用。
1. break语句对if-else的条件语句不起作用。
2. 在多层循环中,一个break语句只向外跳一层。
newtee 2012-10-09
  • 打赏
  • 举报
回复
只是跳出它所属的那个循环
图灵狗 2012-10-09
  • 打赏
  • 举报
回复
第一个break退出while循环,第二个退出for循环。
加载更多回复(4)

70,018

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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