GOTO...请告诉我这里不使用GOTO的方法
for ( int i=0;i< 100; i++ )
for ( int j=0;j< 100; j++ )
{
if ( martix[i][j] == 800 )
goto found;
}
found:
return;
thx....
问题点数:0、回复次数:24Top
1 楼lianglp(寻找黄金分割点)回复于 2004-07-04 18:15:14 得分 0
for ( int i=0;i< 100; i++ )
for ( int j=0;j< 100; j++ )
{
if ( martix[i][j] == 800 )
{
i = 100 ;
break ;
}
}
Top
2 楼zzhe79()回复于 2004-07-04 18:25:43 得分 0
break跳出循环体;continue开始下一个循环Top
3 楼xta(小茹)回复于 2004-07-04 18:32:16 得分 0
bool b=false;
for ( int i=0;i< 100 && !b; i++ )
for ( int j=0;j< 100 && !b; j++ )
{
if ( martix[i][j] == 800 )
b=true;
}
这种方法就是消除goto语句的通用方法!
Top
4 楼pomelowu(羽战士)回复于 2004-07-04 18:46:50 得分 0
for ( int i=0;i< 100; i++ )
for ( int j=0;j< 100; j++ )
{
if ( martix[i][j] == 800 )
return;
}
Top
5 楼pomelowu(羽战士)回复于 2004-07-04 18:47:48 得分 0
goto真的不是洪水猛兽……不要仇视它,用的时候小心一点就行了!!Top
6 楼GOTO_2002(mmmttt)回复于 2004-07-04 18:58:05 得分 0
^^
UpUp~~Top
7 楼bluebohe(薄荷)回复于 2004-07-04 18:59:10 得分 0
不使用goto的一个方式是将一部分代码放进入到一个函数中,在函数中使用returnTop
8 楼skyfine(柳荣宏)回复于 2004-07-04 19:13:03 得分 0
bool b=false;
for ( int i=0;i< 100 && !b; i++ )
for ( int j=0;j< 100 && !b; j++ )
{
if ( martix[i][j] == 800 )
b=true;
}
加上这个也许就满足了你的要求
if(!b)
{
return;
}
Top
9 楼2c18(我是一只菜菜鸟)回复于 2004-07-04 19:16:23 得分 0
学习Top
10 楼madmanahong(疯子阿虹)回复于 2004-07-04 19:57:02 得分 0
这段代码只是一个小小的片断~
加入我在这个函数里面要进行很多个析构,再或者说这个循环之后还有100条语句要执行~
//---------
for ( int i=0;i< 100; i++ )
for ( int j=0;j< 100; j++ )
{
if ( martix[i][j] == 800 )
goto found;
}
// do something..
found:
// do a lots of something...
return;
这里还有必要消除这个goto吗?
我怎么感觉没有必要呢?
因为我看见过MS的代码里面有很多goto,并且在很多高手的代码,譬如说:quake2引擎中就充斥着大量的goto.
然而我们的组内代码规范书上说不要使用goto。
怎么办?
难为 啊~
有有经验的来传授吗???Top
11 楼heavenchang(学习ing)回复于 2004-07-04 20:00:00 得分 0
goto很可怕么,不用滥用就是了,Top
12 楼lambochan(打杂)回复于 2004-07-04 20:08:28 得分 0
goto就是goto,从深层循环跳出就是它最大的优点,其它的不可比拟..
难道认为在循环体内加N个条件break,比一个goto要易读么?
Top
13 楼lovenoend(有容乃大)回复于 2004-07-04 20:09:08 得分 0
1、这里用GOTO是完全可行的
2、也可这么:
for ( int i=0, j=0; i<100*100 && martix[i][j]!=800; ++i, j=i%100);
Top
14 楼jink(毁人不倦)回复于 2004-07-04 20:18:06 得分 0
尽信书不如无书
是这么说的吧,我记性不好,汗一个...Top
15 楼ColdMooon(天上有个太阳)(水中有个月亮)回复于 2004-07-04 21:22:29 得分 0
尽信书不如无书,尽信人不如杀人。Top
16 楼blueclu0281(努力)回复于 2004-07-04 21:40:29 得分 0
使用一个函数就好了Top
17 楼daienming(键盘上的蛤蟆)回复于 2004-07-04 21:55:50 得分 0
goto ??反正我从来没用过,学习了,嗬嗬!Top
18 楼nlstone(天外流星)回复于 2004-07-04 22:15:07 得分 0
为什么有goto不用?
不用白不用:)Top
19 楼pomelowu(羽战士)回复于 2004-07-04 23:05:08 得分 0
然而我们的组内代码规范书上说不要使用goto。
---------------------------------
如果你不能够修改代码规范书,那么请不要使用goto。
如果你能够修改代码规范书,那么这种情况下就可以使用goto,只不过要小心,尤其是内存的分配上的问题。
还是那句话,goto不是洪水猛兽。存在即合理,不然要它来做甚。至是它太容易导致错误了,所以要谨慎使用,仅此而已。Top
20 楼countryboy(沉淀)回复于 2004-07-04 23:38:26 得分 0
用goto很正常啊`!~!~!~
为什么不能用???小心点就是了`!Top
21 楼whoo(谁)回复于 2004-07-05 00:29:23 得分 0
呵呵,这个地方goto要用得理直气壮。
用文学的话说就是“不以词害意”。Top
22 楼programfanny()回复于 2004-07-05 05:12:47 得分 0
GOTO在编译后和循环、条件、break,continue 等语句一样,都是(包含)JMP指令的,因此实质是一回事,恰当地使用可提高程序的效率。但也可能带来了可读性方面的副作用。因此说编程序是一种选择与权衡。Top
23 楼elssann(睡睡裤)回复于 2004-07-05 09:13:10 得分 0
for ( int i=0;i< 100; i++ )
for ( int j=0;j< 100; j++ )
{
if ( martix[i][j] == 800 )
return;
}
found:
return;
/////////////////////////////////////
既然found后面是return,为什么不直接returnTop
24 楼elssann(睡睡裤)回复于 2004-07-05 09:14:21 得分 0
前面朋友提到的b = TRUE可以解决
刚才回的没看清楚Top




