2012-05-30 63 views
2

在C++中,如果給出了額外輸入,會發生什麼情況?它是否存儲在某個地方或完全被忽略?用戶提供的超額數據會發生什麼情況?

例如,此示例代碼:

#include <iostream> 
using namespace std; 
int main() 
{ 
    char a, b, c; 

    cout << "Enter three letters: "; 

    cin.get(a).get(b).get(c); 

    cout << "a: " << a << "\nb: " << b << "\nc: " << c << endl; 
return 0; 
} 

剛剛詢問三個字母,都會讓我輸入多達我想。其餘的去哪裏?最好在哪裏......對嗎?

回答

3

它們進入輸入緩衝區。當您的進程退出(不讀取它們)時,緩衝區將被丟棄(以及未讀取的內容)。

+0

哇,很酷,感謝您的快速響應!我仍然不得不試着去研究,以確保它們在任何情況下都不會被閱讀......除非你能證實這一點嗎? 編輯:如此之快,我甚至不能接受它! – rofls

+1

我不知道任何可以爲每個可能的操作系統提供絕對確認的東西,但我不知道(也很難想象)一個操作系統在哪裏,否則也是如此。 –

+1

@rofls:他們(可能)不讀取,如果*你*不讀它們。如果你的函數的後半部分試圖從'cout'中讀取,那麼它將首先讀取垃圾。 –

2

這取決於。有幾個緩衝區正在運行。 通常(沒有任何 保證,但對於Unix和Windows肯定是這種情況),你必須在你的程序看到任何數據之前按下enter鍵;您輸入的所有內容(包括輸入)都會進入緩衝區,然後在進程終止時丟棄這個 。

這是默認行爲,假設您的進程從shell的命令行啓動了 ,並且該標準輸入連接到鍵盤 。如果另一個進程已經啓動了您的進程,則可能 已重新配置輸入以表現不同;很有可能 配置鍵盤(至少在Unix下)發送每個字符 ,因爲在這種情況下,讀取它之後讀取鍵盤 的下一個進程將會獲得額外的字符。

最後,如果標準輸入來自文件,當然, 文件中的數據會保持原樣,就像您期望的那樣。如果它來自管道,至少在Unix上爲 ,數據將被丟棄,並且任何仍然寫入管道的進程將會收到一個信號。

相關問題