break与if——爱恨别离两相知
接过上贴:http://expert.csdn.net/Expert/topic/2103/2103389.xml?temp=.6260034
我再问一个break 不是可以跳while /for/switch这些吗?可是,以下程序居然写在if后面??
见程序中注释,break如果移到下一个花括弧后就错了。可是为什么呢?
照道理说,如果break只是用来跳出for的,那么写在if内和if外都是从for里跳出来的,可为什么……却会有区别??
谁能解释一下?
#include "stdio.h"
main()
{
int a[11]={1,4,6,9,13,16,19,28,40,100};
int temp1,temp2,number,end,i,j;
printf("array a:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
printf("Insert data:");
scanf("%d",&number);
end=a[9];
if (number>end)
a[10]=number;
else
{
for(i=0;i<10;i++)
{
if (a[i]>number)
{
temp1=a[i];
a[i]=number;
for(j=i+1;j<11;j++)
{
temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;/*注意这个break! */
}/*为什么break不写在这个括号后面??*/
}
}
printf("Now ,array a:\n");
for (i=0;i<11;i++)
printf("%6d",a[i]);
}
问题点数:10、回复次数:13Top
1 楼titi_lima(titilima(李马)的马甲.net)回复于 2003-08-03 17:48:19 得分 0
写在那里就会成为循环体必经的一部分了,所以循环第一次就会跳出。Top
2 楼ScorpioZZR(小天使)回复于 2003-08-03 17:51:13 得分 0
不懂~~能不能具体点说?Top
3 楼titi_lima(titilima(李马)的马甲.net)回复于 2003-08-03 17:54:24 得分 3
/* 如你所见,i的for循环 */
for(i=0;i<10;i++)
{
/* 先执行if的这一段 */
if (a[i]>number)
{
temp1=a[i];
a[i]=number;
for(j=i+1;j<11;j++)
{
temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;/*注意这个break! */
}/*为什么break不写在这个括号后面??*/
/* 如果break写在这里,那么执行完if就会继续执行这一句,那么这个循环体(i的for循环)就会在break的作用下结束了 */
}Top
4 楼loyyer(我爱C++)回复于 2003-08-03 17:59:49 得分 0
同意楼上!Top
5 楼cjnet(孤星剑)回复于 2003-08-03 18:00:57 得分 0
就是那样的。Top
6 楼ScorpioZZR(小天使)回复于 2003-08-03 18:07:09 得分 0
那为什么不是写在j的for循环里呢?——如果break只能跳出for而不是if的话,那么写在if内外都一样的吧?
我就是奇怪,break怎么也能跳出if而不是for/while这种??Top
7 楼ScorpioZZR(小天使)回复于 2003-08-03 18:08:27 得分 0
titi_lima:
干脆你再解释清点算了,我把10都给你。
明晚结贴Top
8 楼titi_lima(titilima(李马)的马甲.net)回复于 2003-08-03 18:12:42 得分 2
这里的break并不是跳出if(虽然它的确是跳出了if),它的目的是当if的条件满足后跳出for(也就是说,它的执行对象是for而不是if),你应该理解一下这个排序算法的思想和流程。Top
9 楼loyyer(我爱C++)回复于 2003-08-03 18:19:27 得分 0
同意楼上Top
10 楼gernal_dn()回复于 2003-08-03 18:54:19 得分 3
if (number>end)
a[10]=number;
else
{
for(i=0;i<10;i++)
{
if (a[i]>number)
{
temp1=a[i];
a[i]=number;
for(j=i+1;j<11;j++)
{
temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;/*注意这个break! */
}/*为什么break不写在这个括号后面??*/
}
}
==========
temp1=a[i];
[i]=number;
for(j=i+1;j<11;j++){...}
break;
这四句是平行的,break 是跳出前一个循环for(i=0;i<10;i++),而if (a[i]>number)是跳出的条件。
break不是跳出if,而是跳出for.
Top
11 楼Mephisto_76((望美人如梦))回复于 2003-08-03 19:04:38 得分 1
你用for语句是干什么的呢?就是让它循环执行一系列的操作,以达到我们的目标。如果在这一系列的操作过程中达到了我们设定的条件的话,可能我们的目标就达到了,这时候再循环下去只是浪费时间或者造成错误的结果。而判断目标是否达到的办法就是用if语句。所以在if语句里做了一系列的处理就应该义无返顾的来一个break跳出循环。在外边用的话就是不管条件达不达到,执行一次循环中的操作就跳出了,这显然是不对的,与愿望相反。Top
12 楼bobob(静思)回复于 2003-08-03 19:22:11 得分 1
放到if后面,只是为了在满足某个条件后跳出for,而不是跳出if!
Top
13 楼ScorpioZZR(小天使)回复于 2003-08-03 22:27:20 得分 0
谢谢大家,非常开心,看过你们的回复我明白了,提前结贴,不过我分不多没照顾到的下次补偿Top
相关问题
- to love_hate(爱恨交加)
- 放分过年,暂时别离CSDN!
- <觉悟人生>之[爱恨情仇]
- 我对Java不是很熟悉, 现有 6个英文术语, 相知道中文的说法.
- 各位我以前是用VC++的,我相知道在C++ BUILDER中WINDOWS API支持多少,WINSOCKETS API能直接使用吗?
- 各位大侠!相知道怎样可以看到sql 2000存储过程中的代码?高分必定相送!
- 我怎么了,我不知道!心活在寂寞深渊爱恨两端我就快要崩溃!!!!!!!!!!!!!!
- 还在上学的小弟弟小妹妹,送给你们一首我写的散文诗《九月,一个惊心动魄的别离》,希望开心,呵。。。
- (xiaoya317(小雅||别离,是为了重聚·····))我朋友的qq被人盗了,请问那位能提供一个8位的号码。高分酬谢!
- page break and printing




