Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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++ 是什么使程序停止的std::cin?_C++_Input_Cin_Istream - Fatal编程技术网

C++ 是什么使程序停止的std::cin?

C++ 是什么使程序停止的std::cin?,c++,input,cin,istream,C++,Input,Cin,Istream,我的理解是,std::cin是一个std::istream对象std::ostream和std::istream对象包含字符缓冲区,或者至少引用它们。当执行std::cin>>myvar时我的理解是,您正在使用std::istream对象上的>提取运算符从流缓冲区中提取。但我不明白是什么让这个节目停止了。我一直在测试它,我注意到它只有在它看起来是空的时候才会停止程序,因为这样做: char c; std::cin >> c; // Awaits input from the con

我的理解是,
std::cin
是一个
std::istream
对象
std::ostream
std::istream
对象包含字符缓冲区,或者至少引用它们。当执行
std::cin>>myvar时
我的理解是,您正在使用
std::istream
对象上的
>
提取运算符从流缓冲区中提取。但我不明白是什么让这个节目停止了。我一直在测试它,我注意到它只有在它看起来是空的时候才会停止程序,因为这样做:

char c;
std::cin >> c;  // Awaits input from the console
// I input: 1, 2, 3
std::cin >> c;  // Extracts the 2, no halt
std::cin >> c;  // Extracts the 3, no halt

std::cin >> c; // Awaits input from the console
基本上,我想知道的是
std::istream
对象的这一行为。当它是空的,它会停下来直到有东西放进去?我试图通过创建自己的
std::istream
对象来测试这一点,但它无法编译,这是一个关于受保护的错误。

不要挂断“缓冲区”。所有输入(通常)都是缓冲的。这很方便,因为从硬件一次读取一个字符的速度非常慢;一次读取一组字符并将它们存储在某个地方(缓冲区)可以快得多。这不会影响下面的东西。当您读取一个字符时,如果缓冲区中没有任何内容,则系统会在硬件中查找下一个字符。如果它找到一个字符,它会将其返回给您,也许它会读取更多字符并将其存储在缓冲区中;read函数直到读取下一个字符并进行适当的缓冲,或者发现它位于输入流的末尾时才返回


当您到达输入流的末尾时,尝试读取会给您EOF。当输入流是来自文件的文本时,很容易检测到:当您到达文件的末尾时,您就在输入流的末尾。当输入流是控制台时,很容易混淆。控制台并没有一个固有的目的:你可能只是休息一下喝杯咖啡,期待着回来时输入更多的东西。因此,除非您告诉系统控制台已处于输入的末尾,否则它只会等待更多。告诉控制台它在输入结束时的方式取决于系统;在UNIX系统上,您可以通过键入ctrl-D来执行此操作;在Windows下,它是ctrl-Z。

当它为空时,它会停止,直到有东西放入其中?确切地如果没有输入,你不能说你得到了输入,所以你要等待它。程序不会停止。它正在等待输入,这正是您从交互设备读取时应该期望的行为。文件具有一定的大小。如果你到了文件的末尾,你就知道了。如果用户没有输入任何内容,您希望发生什么?所有操作都需要时间。有些操作没有时间上限。阅读控制台输入是其中之一,Stream可以绑定到各种各样的东西。您可以有一个读取字符串的流,一个网络连接。。。。。当没有数据时,他们的行为都有细微的差异。有些人会报告他们已经到达终点,有些人会等待更多的数据。cin stream等待您键入更多内容,然后按enter键“在Windows下,它是ctrl-C”。错误。Windows下的EOF是Ctrl-Z。Ctrl-C终止程序。@AlgirdasPreidžius--感谢您的更正。修正了。虽然引擎盖下的其他缓冲形式大多不起作用,但线路缓冲确实很重要。