有关缓冲,getchar()和scanf()的问题?

时间:2011-03-07 01:00:33

标签: c buffer

我正在学习C并且有一些问题。请看下面的图片:

enter image description here

阅读高亮文字时,我很困惑。是这样的:当用户开始输入一些输入时,输入直接放在缓冲区中。当按下Enter键('\ n')时,程序从缓冲区读取并获取输入,然后清除缓冲区?

如果是,假设在程序中,我使用:scanf("%d", &a_variable)然后输入 123astring ,然后从缓冲区读取 123 并清除。那么,在缓冲区中现在包含“ astring ”?

我是对的吗?或者我误解了什么?

1 个答案:

答案 0 :(得分:3)

确实有两个缓冲区。 第一个是他们正在谈论的那个。它允许用户输入内容,然后删除等,而程序没有看到任何内容。 第二个缓冲区将保留剩余的“astring”。

考虑它的好方法是按下Enter时第一个缓冲区传递给第二个缓冲区。 scanf读取第二个缓冲区。如果它是空的,程序会等待。

第二个缓冲区几乎总是存在。如果不是,那么即使在'unbuffered'的情况下,你也必须在用户键入时完全运行scanf。