2012-10-24 89 views
2

由於某些原因,我的程序正在跳過代碼段cin.get();cin.ignore();。我不知道爲什麼會發生這種情況,因爲這兩個片段在main()作用域內工作正常,而不在if語句中。跳過cin.get()和cin.ignore()

這裏是培訓相關的代碼片段:

input.open(inputFileName); 
if (input.fail()) 
{ 
    cout << "Error: failed to open '" << inputFileName << "'.\n\n"; 
    cout << "Press '' to end the program..."; 
    cin.get(); //cin.ignore() also does nothing. 
    input.close(); 
    exit(1); 
} 

源代碼的其餘部分可以在這裏找到:http://pastebin.com/xy0qMvBq

+1

很可能是因爲輸入緩衝區中已經有一些輸入。所以操作立即完成。 –

回答

2
cin >> inputFileName; 

與該命令時,用戶要輸入一些「東西「,然後按回車。這將把「東西」,再加上一個換行符到輸入緩衝區中。然後,「stuff」將被存儲到inputFileName中,並且換行符將被留在那裏。這是cin.get()和cin.ignore()讀取的內容,它們不會被跳過。

+0

這就是我的想法。但是在'cin >> inputFileName'後面添加'cin.clear()'時,'cin.get()'仍然無法暫停程序。我錯誤地認爲'cin.clear()'清除了輸入緩衝區?如果是這樣,我會用什麼來清除輸入緩衝區? –

+1

@JonRurka:不,'cin.clear()'不會清除輸入緩衝區。它清除cin上的錯誤標誌,我看不出有理由相信你應該有任何錯誤。實際上沒有可靠的方法來清除輸入緩衝區。但是,您可以使用'cin.ignore(numeric_limits :: max(),'\ n')'來忽略字符,直到換行。在你的情況下,你可以調用'cin.ignore()'兩次(而不是一次)。或'cin.ignore()'後面跟着'cin.get()'。 –

+0

有兩個'cin.ignore();'線條完美運作。感謝您的幫助! –

0

您發佈的代碼部分絕對正常,在這種情況下cin.get()不會被忽略。