当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 26 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : [问题]帮忙看个超简单的C++ 程序
帖子发表于 : 2006-04-09 15:14 

注册: 2005-10-21 11:36
帖子: 118
送出感谢: 0 次
接收感谢: 0 次
代码:
#include <iostream>
#include <string>
using namespace std;

int main()  {
    string word;
    while ( cin >> word )   {
        cout << "Word read is: " << word << endl;
    }
    cout << "OK: no more words to read: bye!" << endl;

    return 0;
}

在我的机器上始终跳不出while循环,why, why, why?
cin在linux是以什么判定终结的?


_________________
Life would be much easier if I had the source code.


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2006-04-09 16:33 
头像

注册: 2006-01-02 20:57
帖子: 13
地址: 火翎游骑兵机甲军团第三突击分队
送出感谢: 0 次
接收感谢: 0 次
记得Linux里的EOF标志符是用 Ctrl - D 输入的吧。


_________________
潇潇雨下,红尘皆往。


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2006-04-09 17:30 

注册: 2005-10-21 11:36
帖子: 118
送出感谢: 0 次
接收感谢: 0 次
试了,不行~
继续等。


_________________
Life would be much easier if I had the source code.


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2006-04-09 18:59 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
自己加个调试行。把cin和word都转个临时变量显示出来。


_________________
● 鸣学


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2006-04-10 20:56 
头像

注册: 2005-08-22 14:05
帖子: 1743
地址: 离开北京
送出感谢: 1
接收感谢: 3
cin >> word
这一句的有效返回值是什么??
建议翻翻书看看


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2006-04-10 20:59 
头像

注册: 2005-08-22 14:05
帖子: 1743
地址: 离开北京
送出感谢: 1
接收感谢: 3
如果
int i=cin>>word;
看看 i=什么
我觉得i应该不可能=0所以会死循环


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2006-04-10 23:31 
头像

注册: 2005-10-25 11:15
帖子: 1016
送出感谢: 0 次
接收感谢: 1
不是太了解c++,不过照我的理解cin>>word的返回值是cin,不然就无法解释类似cin>>i>>j的语法。


_________________
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2006-04-12 15:23 

注册: 2005-09-06 0:00
帖子: 7
送出感谢: 0 次
接收感谢: 0 次
这个跟编译器有关系
如果要是比较老版本的编译器在读如空行的时候返回值不为false
写成这样试试:

代码:
if(cin|| word!="\0")
...............;


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2006-04-12 15:35 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
安装16进制输入的方法,按下alt,再0,松手。看出来不。


_________________
● 鸣学


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2006-04-12 20:43 
头像

注册: 2005-10-19 23:48
帖子: 227
地址: 大山丛林
送出感谢: 0 次
接收感谢: 0 次
我觉得你的题目有些问题?????

while ( cin >> word ) 中cin>>word返回的是什么类型的值?是bool的吗?如果是其他类型至少还要有个判断语句吧。不然while凭什么判断循环的结束呢??
如果是int或者char有可能和某些系统的0为false,1为true碰巧吻合。

同樣的,linux下面也是enter結束cin的輸入。但是你只是告訴系統,你的cin完畢,ok,執行下一條語句,但是並沒有while的循環的結束的判斷語句啊,所以會無限循環下去的,這樣說可能比較清晰。

个人意见,不知道正确不??


_________________
图片It is no use doing what you like; you have got to like what you do!


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2006-04-17 0:05 

注册: 2005-10-21 11:36
帖子: 118
送出感谢: 0 次
接收感谢: 0 次
抱歉下,我有一个礼拜没上网,今天来了下,看到这么多回复,实在是太感谢了!

iostream文件中cin的申明:
代码:
extern istream cin;       ///< Linked to standard input


代码:
while ( cin >> word )
这句话是C++ Primer 3rd Edtion 中文版里的(Page10-Page11),应该没问题。

搞不定,郁闷!
如果while要加入判定的话,那该加入什么呢?我用\0, NULL, EOF都试过了,不行!


_________________
Life would be much easier if I had the source code.


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2006-04-17 0:06 

注册: 2005-10-21 11:36
帖子: 118
送出感谢: 0 次
接收感谢: 0 次
天羽云尘 写道:
记得Linux里的EOF标志符是用 Ctrl - D 输入的吧。

又试了下,./cin 后,输入一段文字,回车,输出结果,CTRL-D真能退出程序!不知道为什么?


_________________
Life would be much easier if I had the source code.


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2006-04-18 15:29 

注册: 2006-02-18 15:56
帖子: 18
地址: china
送出感谢: 0 次
接收感谢: 0 次
while(cin>>word)
时,当遇到EOF会结束,也就是ctrl+D,返回值应该是word吧。
在win下ms是ctrl+Z?

EOF么,end of file,文件尾的意思。


_________________
Hi I'm darksun.


页首
 用户资料  
 
14 楼 
 文章标题 :
帖子发表于 : 2006-04-20 21:17 
头像

注册: 2005-10-19 23:48
帖子: 227
地址: 大山丛林
送出感谢: 0 次
接收感谢: 0 次
EOF : End of file 的意思,代表 "结束输入"
可以输入stty -a 把终端预设的按键显示出来,也可以用stty修改,具体man;

下面是kernel中的一段原文,希望对你有作用。他的while的结束判断就是EOF。
eof后返回while语句一个0值?然后导致你的程序退出while循环,所以while还是有一个判断的,也就是1,0的bool判断;enter在linux的bash下只是一个换行符,所以会一直执行下去。

#include
#include

_syscall1(int,addtotal,int, num)

main()
{
int i,j;

do
printf("Please input a number\n");
while(scanf("%d",&i)==EOF);
if((j=addtotal(i))==-1)
printf("Error occurred in syscall-addtotal();\n");
printf("Total from 0 to %d is %d \n",i,j);
}
---------------
下面是zlib的函数库原码,相反对于你的那本C++ Primer 3rd Edtion 对于新手,这种省略的语句写法,对于新手实在不是什么好的风格啊 :?: :?: 新手怎么知道这个语句以eof结束,eof又是返回1和0呢?如果是3,4,系统默认不变的话就跳不出了,呵呵。

#include
#include
#include

void main(int argc,char **argv)
{
gzFile zip;
int c;

if (argc<2) return;

zip = gzopen(argv[1],"rb");
while ((c=gzgetc(zip))!=EOF) putchar(c);
gzclose(zip);
}

------------
还是个人想法啊,学习c++语法常辩证,会提高不少语法的精确度啊,呵呵


_________________
图片It is no use doing what you like; you have got to like what you do!


页首
 用户资料  
 
15 楼 
 文章标题 : 呵呵,我也来看看
帖子发表于 : 2006-06-15 18:57 
头像

注册: 2006-06-13 14:47
帖子: 331
地址: 黄鹤楼
送出感谢: 0 次
接收感谢: 1
我在win下试的,如果是cin >> a,a为整型,输入 一个非整型的数即退出,或者也可以按Ctrl+Z
在UNIX下应该 是Ctrl+D结束吧
C++ primer的原话。呵呵!
good luck


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 26 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译