Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 输入何时停止?_C++_String_Loops_Io_Stream - Fatal编程技术网

C++ 输入何时停止?

C++ 输入何时停止?,c++,string,loops,io,stream,C++,String,Loops,Io,Stream,大家好,我有以下问题: 字符串s std::cout << "give me a string" << std::endl; while (std::cin >> s){ std::cout << "give me a string" << std::endl; } cin.clear(); std::cout s){ std::cout您需要发送EOF信号,在Netbeans中是Ctrl+D 但是,按两次Enter键

大家好,我有以下问题:

字符串s

std::cout << "give me a string" << std::endl;  
while (std::cin >> s){
    std::cout << "give me a string" << std::endl;
}
cin.clear();  
std::cout s){

std::cout您需要发送EOF信号,在Netbeans中是Ctrl+D

但是,按两次Enter键将导致循环条件解析为false,从而导致循环停止。这是例外:

如果这不起作用,请使用Ctrl+z和换行符,这是Windows中的EOF信号,如上所述。Ctrl+D适用于Linux,但在您的情况下有效

EOF信号关闭输入流,从而中断循环



此外,在Netbeans中(如果上述操作不起作用),您似乎需要实现这一点。另一种尝试是“按Enter键后按Ctrl+z”,如上所述。

当输入流关闭时,循环将停止

如果您从shell运行程序,那么输入流可能会无限期地打开。在终端中关闭流的具体方式取决于您使用的终端

在UNIX中,发送空输入时流关闭。
ctrl+d
是向流发送(刷新)输入的标准组合键(
^d
是ASCII控制代码EOT,传输结束)。按enter键也会发送输入,但也会插入行尾字符,因此无法使用它发送空输入

ctrl+z
在windows中类似,但它有:

Unix中的EOT字符与DOS中的Control-Z不同。DOS Control-Z字节实际上被发送和/或放置在文件中,以指示文本的结束位置。相反,Control-D使Unix终端驱动程序发出EOF条件的信号,该条件不是字符,而字节在实际读取或写入时没有特殊意义文件或终端


双击不应该停止此操作吗?它不会停止此操作。如果我键入
ctrl+d
,它实际上会停止!!顺便说一句,thx用于回答!不是在Linux上。按
ctrl+d
不会完成流,因此程序不会停止。我在VS 2012上尝试双击,但它不起作用(在默认控制台中测试)。准确地说,按enter键不会进入循环括号。感谢您的回答,实际上它不会停止,因为它会更改两行,然后等待输入。如果我键入某个内容,它将接受它。@jdehesa是如此正确,它实际上起了作用!!thx@gsamaras是的,我的意思是,我不能确切地说为什么两个输入在Linux上不起作用(我猜它在Windows上运行?我没有检查),或者它是否应该运行,我只是测试了该程序,并指出它没有运行。也许这是Windows特有的功能?正如我之前在评论
ctrl+z
中所述,它不会停止进程,因此
ctrl+d
将执行此任务。谢谢回答!