考虑以下代码:
int a;
cin >> a;
输入例如1
或2
时输入不会停止;它等到你按 ENTER 。这是如何运作的?在您按 ENTER 之前,为什么cin
会等待您的输入?
答案 0 :(得分:4)
您的运行时环境和终端控制原始键盘输入。通常,它们仅逐行将输入发送到应用程序,以允许编辑。如果您希望它立即向您发送键盘输入,您必须以与平台相关的方式与您的终端通话。
(这通常被称为“原始”模式,而不是通常的行缓冲“熟”模式。请注意,熟食模式还处理退格和删除以及光标移动等等。)
答案 1 :(得分:3)
cin
后面只有一个缓冲区,用来填充输入,然后在使用提取运算符(>>
)时清空。何时以及如何填满取决于平台。例如,在类Unix系统中,输入终端处于规范或非规范模式。在规范模式下,输入逐行可用。在非规范模式下,它立即可用。可以在这些模式之间切换(检查man termios
)。
标准输入缓冲区的实际大小是实现定义的。