读书人

关于输入流

发布时间: 2013-09-27 14:23:43 作者: rapoo

关于输入流,求助
在书上经常看到这样的程序:


string str;
while(cin >> str)
{
//进行相关操作
cout << str;
}


关于这样的循环,我输入一个字符串,再点回车,就会循环一次,可是我输入什么才能让循环结束呢?
查了一下CSDN,返现输入流重载的>>操作符返回值是*this,怎么输入才能返回NULL?
[解决办法]
在window下,在行尾加Ctrl+Z并且enter后并不会结束程序的运行,而只会将Ctrl+Z当成一个字符来解释,并且将在输入缓冲区中存储的本行数据输出。
要结束输入必须在新的一行(输入enter迫使输出"标准输入"缓存区之后)使用Ctrl+Z。

在linux下,可以在输入enter迫使输出"标准输入"缓存区之后,在新行按Ctrl-D结束输入,这种方法类似于windows的处理方式。也可以在行尾连续两次键入Ctrl-D。

相关解析:
Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF。
如果在一行结束时按下Ctrl-D,则表示输出"标准输入"缓存区,所以这时再按一次Ctrl-D就代表EOF,从而就可以结束输入;
那么,如果真的想输入Ctrl-D怎么办?这时必须先按下Ctrl-V,然后就可以输入Ctrl-D,系统就不会认为这是EOF信号。Ctrl-V表示按"字面含义"解读下一个输入,要是想按"字面含义"输入Ctrl-V,连续输入两次就行了。
注:Linux中按下Ctrl-Z,表示将该进程中断,在后台挂起,用fg命令可以重新切回到前台;按下Ctrl-C表示终止该进程。

Windows中,在新的一行(输入enter迫使输出"标准输入"缓存区之后)开头按下Ctrl-Z表示EOF;如果真的想输入Ctrl-Z,在非行开头的地方输入Ctrl-Z即可,在windows中不能将Ctrl-Z表示为行首字符。

所以两种平台下,都需要先输出“标准输入”缓存区,然后才能用特殊的方法来代表EOF


引用:
在书上经常看到这样的程序:

string str;
while(cin >> str)
{
//进行相关操作
cout << str;
}


关于这样的循环,我输入一个字符串,再点回车,就会循环一次,可是我输入什么才能让循环结束呢?
查了一下CSDN,返现输入流重载的>>操作符返回值是*this,怎么输入才能返回NULL?

[解决办法]
quote=引用:
windwos :ctrl + Z,Enter如果不行重复一次ctrl + Z,Enter
Linux :ctrl + D

读书人网 >C++

热点推荐