2014-09-10 83 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