| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:  注册  忘记密码
 
密 码:  
共有 1317 人关注过本帖
标题:[求助]goto语句真的很讨人厌吗?
只看楼主 加入收藏
xingyu23
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-12-21
收藏
 问题点数:0 回复次数:9 
[求助]goto语句真的很讨人厌吗?

是不是C语言都很忌讳goto语句!~我叫人家帮我看下这个程序.人家一看有goto理都不理!~
我是初学者,能不能跟我讲下goto语句为什么那个另人讨厌!~我看这个程序似乎不是很乱嘛!~

#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 100
char str[N];
unsigned long int n;
change(n)
{int a[N],i,t,m;
if(n!=0)
{for(i=0;i<N&&n!=0;i++)
{a[i]=n%2;
n=n/2;}
m=i;
for(i=0;i<(m+1)/2;i++)
{t=a[i];a[i]=a[m-1-i];a[m-1-i]=t;}
printf("BIN:");
for(i=0;i<m;i++)
{printf("%d",a[i]);}
printf("\n");}
else
printf("BIN:0\n");
}

int getnum(char c)
{
int j;
char str0[16]="0123456789ABCDEF";
for(j=0;j<16;j++)
{
if(str0[j]==c)
break;
}
return(j);
}
unsigned long any_to_dec(char _num[N],int radix)
{int i;
unsigned int y;
unsigned long dec=0;
y=strlen(_num);
y--;
for(i=0;_num[i]!=NULL;i++,y--)
{
dec=dec+(getnum(_num[i])*pow(radix,y));
}
return(dec);
}
main()
{
int radix;
char ch;

loop:printf("Please input the radix of the number(2,8,10,16):\n");
scanf("%d",&radix);
switch(radix)
{
case 2:loop2:printf("BIN:");
scanf("%s",str);
n=any_to_dec(str,radix);
if(n>4294967295)
{printf("Data error!");
goto loop2;}
printf("DEC:%ld\n",n);
printf("OCT:%lo\n",n);
printf("HEX:%lX\n",n);
printf("1.Press ESC to return to the main\n");
printf("2.Press any key to exit.\n");
ch=getch();
if(ch==27)
{exit(0);}
else
{goto loop;}
case 8:loop8:printf("OCT:");
scanf("%s",str);
n=any_to_dec(str,radix);
if(n>4294967295)
{printf("Data error!");
goto loop8;}
change(n);
printf("DEC:%ld\n",n);
printf("HEX:%lX\n",n);
printf("1.Press ESC to return to the main\n");
printf("2.Press any key to exit.\n");
ch=getch();
if(ch==27)
{exit(0);}
else
{goto loop;};
case 10:loop10:printf("DEC:");
scanf("%s",str);
n=any_to_dec(str,radix);
if(n>4294967295)
{printf("Data error!");
goto loop10;}
change(n);
printf("OCT:%lo\n",n);
printf("HEX:%lX\n",n);
printf("1.Press ESC to return to the main\n");
printf("2.Press any key to exit.\n");
ch=getch();
if(ch==27)
{goto loop;};
case 16:loop16:printf("HEX:");
scanf("%s",str);
n=any_to_dec(str,radix);
if(n>4294967295)
{printf("Data error!");
goto loop16;}
change(n);
printf("OCT:%lo\n",n);
printf("DEX:%ld\n",n);
printf("1.Press ESC to exit.\n");
printf("2.Press any key to return to the main.\n");
ch=getch();
if(ch==27)
{exit(0);}
else
{goto loop;};
default:printf("Data error!\n");goto loop;
}
}

搜索更多相关主题的帖子: goto 语句 
2006-12-28 16:23
dragonfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1024
专家分:0
注 册:2006-3-20
收藏
得分:0 
你的代码写的比较不规范
关于goto是这样:尽量不要用,如果不可避免可以用
原因是Goto会使程序的可读性下降,而且可能会出现不可预料的结果

2006-12-28 16:46
emyhello
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-1-3
收藏
得分:0 
我觉得goto有点像汇编语言的思维能力.
2006-12-28 17:34
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用emyhello在2006-12-28 17:34:55的发言:
我觉得goto有点像汇编语言的思维能力.

但是汇编是不好读的,因此最好不用goto而用continue;break;等代替退出,for;while等代替goto类条件循环


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-12-28 20:23
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
再加个return exit.

倚天照海花无数,流水高山心自知。
2006-12-28 20:55
hao0716
Rank: 4
等 级:业余侠客
威 望:1
帖 子:354
专家分:224
注 册:2006-4-11
收藏
得分:0 
觉得可以用 但是要少用 不然飞来飞去的很容易让人看不清楚

2006-12-29 09:36
lwei
Rank: 5Rank: 5
等 级:职业侠客
威 望:3
帖 子:197
专家分:369
注 册:2005-5-4
收藏
得分:0 
goto 不会让人讨厌, 但楼主写的程序有点让人讨厌哦

2006-12-29 11:05
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
goto语句的使用使得程序的证明极为不方面.
Dijkstra说过:goto语句是有害的

倚天照海花无数,流水高山心自知。
2006-12-29 11:21
hao0716
Rank: 4
等 级:业余侠客
威 望:1
帖 子:354
专家分:224
注 册:2006-4-11
收藏
得分:0 

自从提倡结构化设计以来,goto就成了有争议的语句。首先,由于goto语句可以灵活跳转,如果不加限制,它的确会破坏结构化设计风格。其次,goto语句经常带来错误或隐患。它可能跳过了某些对象的构造、变量的初始化、重要的计算等语句,例如:

goto state;

String s1, s2; // 被goto跳过

int sum = 0; // 被goto跳过

state:

如果编译器不能发觉此类错误,每用一次goto语句都可能留下隐患。

很多人建议废除C++/C的goto语句,以绝后患。但实事求是地说,错误是程序员自己造成的,不是goto的过错。goto 语句至少有一处可显神通,它能从多重循环体中咻地一下子跳到外面,用不着写很多次的break语句; 例如

{ …

{ …

{ …

goto error;

}

}

}

error:

就象楼房着火了,来不及从楼梯一级一级往下走,可从窗口跳出火坑。所以我们主张少用、慎用goto语句,而不是禁用。

林锐博士说滴............


2006-12-29 13:51
xingyu23
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-12-21
收藏
得分:0 
谁能帮我改下.把goto语句换了!~我初学者.搞不懂才用的!~
2006-12-29 20:08
快速回复:[求助]goto语句真的很讨人厌吗?
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024098 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved