2014-09-10 46 views
0

我们如何看到与输入文件流(STDIN)关联的缓冲区内容。假设我们使用scanf,getchar或任何输入函数给出输入,它实际上是如何存储在缓冲区中的。特别是当我们按下“enter”键时。与输入文件流关联的缓冲区

例如:

情况下:1)

$输入的两个整数: 10 20(输入) $输入的两个整数: 10(输入) 20(输入)

情况下2:

$输入两个字符 ab(输入) $输入两个字符 a(回车) b(输入)

为什么在情况1中它忽略空格键(ASCI-32),但在case2中它将空格键作为下一个输入。它是scanf函数或终端的属性。

+0

显示您正在使用的代码将使该帖子更容易理解和回答。 – chux 2014-09-10 18:12:17

+0

所有'scanf()'说明符都像''%d'',''%f'',''%s'''消耗并且不保存前导空格(包含'''')_except_ for'“%c “','”%[“','”%n“'。 'scanf(“%c”,...)'和'getkey()'不会忽略任何东西。 – chux 2014-09-10 18:17:43

回答

0

在第一种情况
这是忽略了空格键,因为根据ASCII字符集的“空间”是 ,其ASCII值以十进制是32
当“%d”遇到值的字符32它会忽略它,因为它不能是整数,因为
整数文字的范围介于48(0)和57(9)之间。

中,我们使用“%c”按钮输入的字符的量,空间(ASCII - 32)第二壳体


完全有效的输入,并且因此不被忽略。

您也可以使用%d来输入字符,但你必须提供的ASCII值
为要输入一个字符,如:
如果你想输入和显示“A”为字符那么你的输入必须是65.

希望这有助于澄清一些事情。

+0

好吧....我了解空格键问题。现在在第二种情况下,程序将输入为空格键或输入为输入缓冲区中的第二个字符。有什么工具或工具可以看到与文件流相关的输入缓冲区(在这种情况下是STDIN)。 – 2014-09-11 06:46:33