什么是标准输入缓冲区?

问题描述 投票:0回答:2
#include <stdio.h>

int main(void)
{
    int c;
    c = getchar();
    putchar(c);
    c = getchar();
    putchar(c);
    c = getchar();
    putchar(c);
    return 0;
}

我想了解为什么被调用三次的函数与仅输入一次的行一起工作。 有人解释说,在这种情况下我们使用标准输入缓冲区,那是一块内存。 我想读一些有关它的内容。你能给我一些资源吗?

c stdin getchar putchar
2个回答
4
投票

这是终端(命令行窗口)的一项功能。

默认情况下,终端将收集用户的输入,直到他按下 Enter/Return。然后整行被推送到程序的输入文件流(

stdin
,也就是说;由于您使用
<stdio.h>
而不是
<iostream>
,因此不涉及
cin
)。

这很有用,因为您的程序不必处理解释所有键盘事件(例如,按下 Backspace 时删除字母)。想要自己处理键盘的程序可以禁用此默认输入模式。我认为相关的 Google 关键字是

terminfo
termcap

特别是关于您的问题,如果一行输入包含三个字符,那么一行输入适合三个

getchar()
调用。如果您只输入了一个字符,您的程序应该等待后续的
getchar()
调用以获取更多输入。


0
投票

getchar() 实际上从输入缓冲区读取您的输入。
我说的这个是什么意思?
说我们有这样的声明:
a = getchar()
在您输入的终端上:
G
然而,您不仅输入了 G,您实际上输入了 G,然后按下了
Enter,回车基本上就是换行符。所以你输入的是 \ G 。
所以你的缓冲区现在看起来像
G
现在, getchar() 只从键盘读取一个字符是一个错误的概念。它而是读取输入缓冲区中的第一个字符。所以当
b = getchar() 被执行, 字符存储在其中。
注意:使用缓冲区时,字符将从缓冲区中删除。
注意:有手动方法可以刷新缓冲区。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.