void main(){
string str;
while (cin>>str)
{
cout << str << " ";
}
system("pause");
}
执行这段代码时为什么我在输入结尾输入 ctrl+z后不会退出循环呢,而是必须要回车
且在开头输入ctrl+z才能结束输入。
比如我这样输入:
a b c d e f g ctrl+z
敲回车,输出是
a b c d e f g ,但程序没结束,会让我继续输出,只有当我敲回车且在开头输入ctrl+z
程序才会结束
可以参考这篇文章,http://blog.sina.com.cn/s/blog_4b61c2d701000c1r.html
把crtl+z和其他字符一起,便会把他当作字符串处理,无法判断出它是EOF
你要将crtl+z 独立输入才可以
从键盘上输入a b c d e f g ^z 加 回车之后在Windows系统上是这样处理的:由于回车的作用,前面的 abcd 等字符被送到输入缓冲区,^z不会产生字符,所以更不会存储到输入缓冲区,缓冲区中没有 ^z 的存在。这时,cin.get() 检测到输入缓冲区中已经有数据存在(因此不再检查是否有 ^z 的输入),于是从缓冲中读取相应的数据。如果都读取完了,则输入缓冲区重新变为空,cin.get() 等待新的输入。可见,尽管有 ^z 按下,但是由于在此之前还有其它输入字符(abcd),所以流也不会结束。可以参考这篇文章
百度一下cin对输入的要求
因为WHILE语句只要有输入返回值为1,你可以设置一个变量判断一下,或者直接后面跟一个判断条件