2013-08-28 232 views
0

我正在寫一個簡單的程序,要求用戶輸入一個字母。然後我想讓他輸入一個短語。當它只是一個單一的字符串,我沒有問題。要求用戶輸入一個字符,然後輸入一個字符串

char c; 
string s; 
cin >> c; 
cin >> s; 

但是,當我想要一個短語

cin >> c; 
getline(cin, s); 

當我運行該程序的用戶輸入一個字母后點擊進入我沒有得到一個機會,輸入的短語。當然,如果我輸入字符並在空格後面輸入一個短語,程序就可以正常工作。

相反,當我輸入一個字符,然後在使用第一個方法的空格後輸入單個字符串時,它不會記錄該字符串。

它爲什麼這樣做?

+3

使用'cin.ignore()'...或者只是停止混合'>>'和'getline'。使用其中一個,但不能兩個。 –

回答

3

當您編寫一個字符並按回車時,實際上2個字符被髮送到緩衝區:字符本身和\n作爲Enter鍵的結果。您的cin >> c;只讀取第一個字符,而\n仍然保留在緩衝區中。由於std::getline()在遇到\n字符之前會讀取所有內容,並且因爲\n是遇到的第一個字符,所以它不會讀取任何內容並且程序終止。在std::getline之前添加一個std::cin.ignore();(忽略\n)並且代碼將工作。

+0

這個概念對於僅使用cin而不是getline()的字符串輸入的情況有何不同?當我只用cin >> s;後cin >> c;它似乎工作得很好。 – Ares

+1

'std :: cin()'找到第一個非換行符和非空白字符並讀取,直到它遇到一個。所以'\ n'被跳過。 –

0

由於c只輸入一個字符,用戶按下的輸入鍵被賦予s,所以除此之外的任何東西都不會被記錄下來。只按一個鍵,不輸入字符。否則只是使用一個字符串。

相關問題