| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1762 人关注过本帖
标题:[求助]我不太明白GOTO语句的用法
只看楼主 加入收藏
szd1105
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-11-25
收藏
 问题点数:0 回复次数:9 
[求助]我不太明白GOTO语句的用法

# include <iosteram.h>
main()
{
int i=50;
while(i<=80)
{
szd-h: i += 10;
if(i==80)
goto szd-h
cout<<"i is"<<i<<"\n";
}
}
请问为什么输出的结果没有i=70

搜索更多相关主题的帖子: GOTO 语句 用法 
2006-12-01 13:01
litcatyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:151
专家分:0
注 册:2006-10-27
收藏
得分:0 
你这段程序有错
把szd-h改成szd_h
goto szd_h后加上;

2006-12-01 13:38
zzymoon
Rank: 1
等 级:新手上路
帖 子:82
专家分:1
注 册:2006-9-19
收藏
得分:0 
以下是引用szd1105在2006-12-1 13:01:24的发言:

# include <iosteram.h>
main()
{
int i=50;
while(i<=80)
{
szd-h: i += 10;
if(i==80)
goto szd-h
cout<<"i is"<<i<<"\n";
}
}
请问为什么输出的结果没有i=70

这个程序有很多地方需要修改一下:
首先,include包含的iostream可以不用.h后缀
#include<iostream>就行
第二,main 函数应该带上一个返回值int,这是出于兼容性的考虑,在前面的帖子中,有位兄弟找到了这样的一段话:
在 C 和 C++ 中,不接收任何参数也不返回任何信息的函数原型为“void foo(void);”。可能正是因为这个,所以很多人都误认为如果不需要程序返回任何信息时可以把 main 函数定义成 void main(void) 。然而这是错误的!main 函数的返回值应该定义为 int 类型,C 和 C++ 标准中都是这样规定的。虽然在一些编译器中,void main 可以通过编译(如 vc6),但并非所有编译器都支持 void main ,因为标准中从来没有定义过 void main 。g++3.2 中如果 main 函数的返回值不是 int 类型,就根本通不过编译。而 gcc3.2 则会发出警告。所以,如果你想你的程序拥有很好的可移植性,请一定要用 int main 。
有int main()后,就要加上return 0;当然,你不显示的写int 也就是说默认为int型,也要加上return 0;否则会有warning出现!
第三,标示符写错了,可能是作者的粗心所至,sxd_h,最好还是不要用这样的标示符,感觉没有什么可读性````
第四,goto szd_h;后面要分号!


程序天下,C的亡魂。 偶``````来自地狱
2006-12-01 14:15
szd1105
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-11-25
收藏
得分:0 

不好意思把上边的标示符不小心写错了
假如上面那段程序没有错误那为什么显示的结果为i=60 i=80
如果用continue显示的结果没i=70这我能明白
至于代码我就不写出来了

2006-12-01 15:02
litcatyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:151
专家分:0
注 册:2006-10-27
收藏
得分:0 
我稍微修改了一下,但是程序结构一点没变

# include <iostream>
using namespace std;

int main()
{
int i=50;
while(i<=80)
{
szd_h:
i += 10;
if(i==80)
goto szd_h;
cout<<"i is "<<i<<"\n";
}
return 0;
}

在MinGW Develper Studio(gcc)和Visual Studio 2005中都输出:
i is 60
i is 70
i is 90

如果在你那输出有误,换个编译器吧



2006-12-01 15:11
szd1105
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-11-25
收藏
得分:0 
i=90那不是与while(i<=80)不符
using namespace std;
加上它有什么用
2006-12-01 17:39
litcatyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:151
专家分:0
注 册:2006-10-27
收藏
得分:0 
60和70没什么好说的,80嘛,看这一句if(i==80) goto szd_h;,所以i==80的时候,跳转到szd_h处执行

szd_h处的第一句是i+=80;所以就成90了。之后i!=80,下一句输出。

在之后90〉80不满足循环条件,结束

using namespace std;
因为标准库大部分名称定义在了std命名空间,这一句是把std命名空间中的名字引入到全局空间

2006-12-01 17:48
szd1105
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-11-25
收藏
得分:0 

就你刚才改的那段代码
把using namespace std;这部分不要
书上的结果为i=60 i=80 没i=70
至于90还是不太符合条件

2006-12-01 18:03
litcatyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:151
专家分:0
注 册:2006-10-27
收藏
得分:0 
如果是if(i==70) goto szd_h;的话,输出60,80,90没有70

否则不可能

[此贴子已经被作者于2006-12-1 20:26:56编辑过]


2006-12-01 18:09
litcatyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:151
专家分:0
注 册:2006-10-27
收藏
得分:0 
就算不用编译,口算也能算出来结果是60,70,90

2006-12-01 18:11
快速回复:[求助]我不太明白GOTO语句的用法
数据加载中...
 
   



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

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