| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1672 人关注过本帖
标题:请教一个特业余而我却弄不明白的C++问题
只看楼主 加入收藏
mybrotherwheng
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-7-20
收藏
 问题点数:0 回复次数:26 
请教一个特业余而我却弄不明白的C++问题
string word;
while(cin>>word) 这个语句什么时候为真啊!不管我输入什么字符都不能停止循环!
{ ...
}
拜托高手指教一下啦!拜托!
搜索更多相关主题的帖子: 业余 
2006-07-20 21:52
白色兔子
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-3-8
收藏
得分:0 
这个…… 应该另有一个值和它比较吧,比如 while (cin>>word != ‘#') {}
2006-07-20 22:35
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-21 08:26
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

这个问题有人问过,好象也只是回答了CTRL_Z输出2次,就可以结束


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-21 09:12
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-21 10:11
joekings
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-7-17
收藏
得分:0 

相信不少人都见过这样的句子:cin>>i>>j;
表示可以输入2个值,分别付给i和j;也就是说,它等价于:cin>>i;cin>>j;
实际上,cin>>i也有返回值,它返回的是一个cin。这样就可以把cin>>i>>j;看成(cin>>i)>>j;也就是cin>>j;了,所以可以连续正常输入2个值而只需要1个cin 。同样的还有cout 。
由于返回值cin,这是一个非0值,所以循环可以持续运行。
同样,即使改为2楼的 while (cin>>word != ‘#') {} ,循环依然不会在输入#的时候停下来,因为cin!=‘#’为真!
只有使用while ((cin>>word) != (cin>>word2)) {},这个时候,程序才不会执行{}里面的句子。
因为不论输入的word 和 word2 的值是否相等,它们返回的值都是cin,是相等的,所以while()里面的语句为假,{}里面的语句不执行。


贱而不奸,懒而不烂!
2006-07-21 11:17
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
的确是这样,但是让我不解的是,为什么CTRL_Z(还必须是两次)会让返回的cin是假呢?其他的问题,都如你所说,但是最关键的问题是CTRL_Z是如何工作的呢?那些东西会传给流的真或则假呢?在什么情况下cin对象是0或者NULL呢?

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-07-21 11:26
joekings
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-7-17
收藏
得分:0 
事实上cin只是输入流的一个对象,而在istream.h里面,对>>进行了重载,使cin做>>操作的时候,返回cin。
可能我讲的不太清楚,有书上对此做了深刻的描述。
而对while而言,它是否要执行{}里面的程序,得看()里面的返回值是真或者假,也就是说,对于()里面的式子来说,while只是关心它是真或者假。然而一般情况下,除了0、false外(也许还包括null,这个我不确定)其他的值都是真值,它都会调用{}里面的代码。
另外,楼上的 "CTRL_Z" 是指什么,我不太清楚。
对于"那些东西会传给流的真或则假呢?",很显然,在正常输入情况下,无论输入那个值,while都是真。
除非,你定义了一个int i,使用while(cin>>i){} 当你在键盘上输入的值非int值的时候,cin>>i 会返回一个假值,即,不执行{}里面的代码。

贱而不奸,懒而不烂!
2006-07-21 11:48
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 
cin 是一个对象,它有一些方法,有自己的状态,
>>其实是一个函数,word是这个函数的一个参数。
要想仔细了解cin,需要一些类型方面的知识,一句两句讲不清。

while ( cin>>word ) 的cin>>word当达到文件尾的条件时,返回0,在unix里,流都被当作文件看待,条件一样。
在其他的平台就不同了,ms-dos的键盘输入以'\n'结尾,所以用ctrl+z模拟文件尾的条件。
这个只是个平台的标准的问题,不用费精力在这上面。

2006-07-21 11:55
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
CTRL_Z不是让cin返回假值,是让程序挂起.让程序暂停运行

c++/C + 汇编 = 天下无敌
2006-07-21 12:00
快速回复:请教一个特业余而我却弄不明白的C++问题
数据加载中...
 
   



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

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