[问题]帮忙看个超简单的C++ 程序

软件和网站开发以及相关技术探讨
lqw0205
帖子: 118
注册时间: 2005-10-21 11:36

[问题]帮忙看个超简单的C++ 程序

#1

帖子 lqw0205 » 2006-04-09 15:14

代码: 全选

#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.
头像
天羽云尘
帖子: 13
注册时间: 2006-01-02 20:57
来自: 火翎游骑兵机甲军团第三突击分队

#2

帖子 天羽云尘 » 2006-04-09 16:33

记得Linux里的EOF标志符是用 Ctrl - D 输入的吧。
潇潇雨下,红尘皆往。
lqw0205
帖子: 118
注册时间: 2005-10-21 11:36

#3

帖子 lqw0205 » 2006-04-09 17:30

试了,不行~
继续等。
Life would be much easier if I had the source code.
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#4

帖子 eexpress » 2006-04-09 18:59

自己加个调试行。把cin和word都转个临时变量显示出来。
● 鸣学
头像
ttand
帖子: 1745
注册时间: 2005-08-22 14:05
来自: 离开北京

#5

帖子 ttand » 2006-04-10 20:56

cin >> word
这一句的有效返回值是什么??
建议翻翻书看看
头像
ttand
帖子: 1745
注册时间: 2005-08-22 14:05
来自: 离开北京

#6

帖子 ttand » 2006-04-10 20:59

如果
int i=cin>>word;
看看 i=什么
我觉得i应该不可能=0所以会死循环
头像
laborer
帖子: 1016
注册时间: 2005-10-25 11:15
联系:

#7

帖子 laborer » 2006-04-10 23:31

不是太了解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
inix
帖子: 7
注册时间: 2005-09-06 0:00

#8

帖子 inix » 2006-04-12 15:23

这个跟编译器有关系
如果要是比较老版本的编译器在读如空行的时候返回值不为false
写成这样试试:

代码: 全选

if(cin|| word!="\0")
...............;
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#9

帖子 eexpress » 2006-04-12 15:35

安装16进制输入的方法,按下alt,再0,松手。看出来不。
● 鸣学
头像
jaguar00
帖子: 227
注册时间: 2005-10-19 23:48
来自: 大山丛林

#10

帖子 jaguar00 » 2006-04-12 20:43

我觉得你的题目有些问题?????

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!
lqw0205
帖子: 118
注册时间: 2005-10-21 11:36

#11

帖子 lqw0205 » 2006-04-17 0:05

抱歉下,我有一个礼拜没上网,今天来了下,看到这么多回复,实在是太感谢了!

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.
lqw0205
帖子: 118
注册时间: 2005-10-21 11:36

#12

帖子 lqw0205 » 2006-04-17 0:06

天羽云尘 写了:记得Linux里的EOF标志符是用 Ctrl - D 输入的吧。
又试了下,./cin 后,输入一段文字,回车,输出结果,CTRL-D真能退出程序!不知道为什么?
Life would be much easier if I had the source code.
darksun
帖子: 18
注册时间: 2006-02-18 15:56
来自: china
联系:

#13

帖子 darksun » 2006-04-18 15:29

while(cin>>word)
时,当遇到EOF会结束,也就是ctrl+D,返回值应该是word吧。
在win下ms是ctrl+Z?

EOF么,end of file,文件尾的意思。
Hi I'm darksun.
头像
jaguar00
帖子: 227
注册时间: 2005-10-19 23:48
来自: 大山丛林

#14

帖子 jaguar00 » 2006-04-20 21:17

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!
头像
xiaokang
帖子: 331
注册时间: 2006-06-13 14:47
来自: 黄鹤楼

呵呵,我也来看看

#15

帖子 xiaokang » 2006-06-15 18:57

我在win下试的,如果是cin >> a,a为整型,输入 一个非整型的数即退出,或者也可以按Ctrl+Z
在UNIX下应该 是Ctrl+D结束吧
C++ primer的原话。呵呵!
good luck
回复