2

在 C++ 中,如果输入过多,会发生什么情况?它是存储在某个地方还是被完全忽略?

例如,这个示例代码:

#include <iostream>
using namespace std;
int main()
{
   char a, b, c;

   cout << "Enter three letters: ";

   cin.get(a).get(b).get(c);

   cout << "a: " << a << "\nb: " << b << "\nc: " << c << endl;
 return 0;
}

它只要求三个字母,让我想输入多少就输入多少。其余的都去哪儿了?最好是无处……对吧?

4

2 回答 2

3

它们进入输入缓冲区。当您的进程退出(不读取它们)时,缓冲区将被丢弃(以及未读的内容)。

于 2012-05-30T06:51:11.837 回答
2

这取决于。有几个缓冲区在起作用。 通常(没有保证,但对于 Unix 和 Windows 肯定是这样),您必须在程序看到任何数据之前按 Enter 键;您输入的所有内容(包括 enter 在内)都会进入进程中的缓冲区,然后在进程终止时将其丢弃。

这是默认行为,假设您的进程是从 shell 的命令行启动的,并且标准输入连接到键盘。如果另一个进程启动了您的进程,它可能已经重新配置输入以表现不同;很可能配置键盘(至少在 Unix 下)以在输入每个字符时发送每个字符,在这种情况下,在您读取键盘后的下一个读取键盘的过程将获得额外的字符。

最后,如果标准输入来自文件,那么文件中的数据当然会保持原样,正如您所期望的那样。如果它来自管道,至少在 Unix 上,数据将被丢弃,任何仍在写入管道的进程都会收到信号。

于 2012-05-30T07:39:52.553 回答