2014-01-09 142 views
-1

首先,這裏是代碼:cin.get()不工作,因爲它應該

using namespace std; 
cout << "\aOperation \"HyperHype\" is now activated!\n"; 
cout << "Enter your agent code:_______\b\b\b\b\b\b\b"; 
long code; 
cin >> code; 
cin.get(); 
cout << "\aYou entered " << code << ".....\n"; 
cout << "\aCode verified! Proceed with Plan Z3!\n"; 
cin.get(); 

return 0; 

它編譯沒有問題,幾乎沒有運行缺陷;在'code'從標準輸入接收到它的值之後,最後一個字符串閃爍一個毫秒,程序就會死亡。正如你所看到的,我在最後一個字符串之後放置了'cin.get()'成員函數,以防止這種情況發生,但它仍然在'cin >>代碼之後死亡;'線。

此方法在我的所有其他練習程序中都可以使用,並且這個程序和其他程序之間沒有任何結構上的不同。

有什麼建議嗎?

(假設正確的頭文件和預處理指令到位。)

+0

所以你試圖用它來保持程序人爲打開,這樣你就可以讀取輸出行了? – Seldom

+0

是的,有沒有更好的方法? – akuryo

+0

http://stackoverflow.com/a/20894203/560648請下次搜索。 –

回答

3

您正在閱讀的你已經用你的最終get()通話較早進入換行符。您可能需要等待一些其他輸入之前忽略所有字符,直到幷包括第一個換行符:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
std::cin.get(); 

您可以縮短這個成爲

std::cin >> std::ws; 

如果確定需要進入一個非 - 空白字符來終止程序:操縱器提取空白字符,直到達到非空白字符或流結束。

請注意,std::istream::get()實際上確實因爲它應該工作!它只是讀取下一個字符。它只是不會做你所期望的。

+1

不應['std :: ws'](http://en.cppreference.com/w/cpp/io/manip/ws)也跳過換行符,使'ignore'冗餘? –

+0

@MarkRansom:實際上,你是對的:沒有必要提取已輸入的字符(已更正)。謝謝! –

0

添加一個cin >>代碼行,而不是兩個cin.get()。如果程序關閉了,那麼這可能是最簡單的事情。

相關問題