为什么在C语言中要引入goto语句和if语句构成的循环,而在编程过程中又不提倡使用,急!!!

gooddesign 2003-06-12 06:42:37
1、为什么在C语言中要引入goto语句和if语句构成的循环,而在编程过程中又不提倡使用
2、程序举例,以说明其优劣性

...全文
523 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
liduke 2003-06-17
  • 打赏
  • 举报
回复
就好比吃吗啡,治病有效,但轻易不吃
Siney 2003-06-16
  • 打赏
  • 举报
回复
在多层嵌套结构中,如果你想一下就跳到最外层循环,用goto再合适不过,但是值得注意的是,如果你写出了这样的代码,说明你的程序结构有待改善,因为他是可以化简的
Bobby 2003-06-15
  • 打赏
  • 举报
回复
仅作为跳出多重循环的时候用
delphi0302 2003-06-15
  • 打赏
  • 举报
回复
:)
erictang2003 2003-06-15
  • 打赏
  • 举报
回复
注意C# 任然保留了 GOTO , 它说有只有一种情况有用: 就是 SWITCH 跳出,不过我没试过.
zjy6631 2003-06-15
  • 打赏
  • 举报
回复

什么地方需要goto和if构成的循环,没有人愿意帮忙吗?

在汇编中,跳转语句使用的很频繁的,但在结构化编程中,为了程序的可读性,可维护性,尽量避免用goto 语句.但有时用循环,赋值,条件语句解决不方便的,用goto语句,反而更直观。如Anstinus(笨笨龙) 所举的例子。编程中,为了程序的可读性,最好不用。
Volition2k 2003-06-14
  • 打赏
  • 举报
回复
用 c 语言的时候,错误处理的时候用的比较多。
用 c++ 的时候较少。
lengxue 2003-06-14
  • 打赏
  • 举报
回复
我们国家在制造枪,但也没提倡大家都使用枪啊
但是在战斗这种特殊情况就要使用了
ThinkX 2003-06-14
  • 打赏
  • 举报
回复
为什么有goto: 因为它有用!
为什么不提倡 goto:因为如果用不好,会有副作用,而且是大部分人不一定用好它。
如果你知道它的利弊,在可以安全使用goto的场合可以使用。
Anstinus 2003-06-14
  • 打赏
  • 举报
回复
不好意思,错了一点,goto版本中的
if(found)
break;
两行应该删掉
Anstinus 2003-06-14
  • 打赏
  • 举报
回复
适当地用goto可以简化程序结构,下面举个例子。
break只能退出内层循环,在嵌套的循环中比较麻烦,使用goto可以解决这个问题:

不用goto的版本:

bool found = false;

for(i = 1; i < 100; i++)
{
int* item = other[i];
for(j = 1; j < 1000; j++)
{
if(item[j] == 66)
{
//do something
found = true;
break;
}
}
if(found)
break;
}


用goto的版本:

for(i = 1; i < 100; i++)
{
int* item = other[i];
for(j = 1; j < 1000; j++)
{
if(item[j] == 66)
{
//do something
goto exit;
}
}
if(found)
break;
}
exit:
//other codes

以上的只是两层的循环,如果有多层循环,有多个需考虑的条件,就要多个象found这样的标识变量用以适当得退出外层循环,结构会变得很复杂,用一个goto就可以解决问题
zhuanxin 2003-06-13
  • 打赏
  • 举报
回复
在某些性能需求很高的地方, 可以直接用

君不见 汇编 语言那些跳转指令吗?

je jg jl ............


都是 goto 啊
defencez 2003-06-13
  • 打赏
  • 举报
回复
关于GOTO语句的争论,由来已久,至今的结论为尽量少用
原因有:
1、导至程序可读性差,可维护性也不好。
2、GOTO可被其他语句替换
3、不符合结构化编程的思想,有可能打破低耦合、高内聚的软件工程方法学。

个人观点:
可以不用。
gzyzljk 2003-06-13
  • 打赏
  • 举报
回复
label:
string choice;
string yesno;
writeln('Enter you choice:(A-D)');
writeln('a:......');
writeln('b:.......');
....
choice=readln();
if choice=='a' then
.....
writeln('quit?');
yesno=readln();
if yesno='n' then GOTO label;
......
一个不太好的例子(伪码),呵呵

gzyzljk 2003-06-13
  • 打赏
  • 举报
回复
存在即有其道理...
也就多了一个选择...
lingyunfeipu 2003-06-13
  • 打赏
  • 举报
回复
偶尔用用挺方便的哦
gooddesign 2003-06-13
  • 打赏
  • 举报
回复
什么地方需要goto和if构成的循环,没有人愿意帮忙吗?
sentimental 2003-06-13
  • 打赏
  • 举报
回复
适当使用.
如用在退出多重循环的时候.
dahuzizyd 2003-06-13
  • 打赏
  • 举报
回复
就象一位大师的比喻,降落伞虽然不是经常用,但是在要用到它的时候它就是最需要的了。
我想这也一样,提供了这个方法,在某些真正需要的时候就会发挥它的作用了,关键在与程序员自己的使用。
dw99413145 2003-06-13
  • 打赏
  • 举报
回复
个人认为,在没有办法的前提下,才用goto+if结构
我的第一个作品就用了goto+if结构,是分班的算法:随机数+S型算法。
效率还是可以!
哈哈!
加载更多回复(4)

1,979

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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