解決getline() 中的輸入跳過問題
在程式中使用getline() 函數時,了解一個常見問題非常重要問題:輸入數字後立即得到後續輸入。出現此行為的原因是輸入數字後,換行符號留在輸入流中。
讓我們來看一個具體範例:
int number; string str; int accountNumber; cout << "Enter number: "; cin >> number; cout << "Enter name: "; getline(cin, str); cout << "Enter account number: "; cin >> accountNumber;
執行時,此程式碼的行為異常。輸入號碼後,它立即輸出“輸入帳號”,而不允許使用者使用 getline(cin, str) 輸入姓名。
這種行為的原因在於 getline() 讀取輸入的方式。它讀取整行,包括換行符。當您輸入數字並按 Enter 鍵時,換行符號將保留在輸入流中。當呼叫 getline() 時,它會讀取此換行符號並返回,而不等待任何其他輸入。這會導致程式跳過“輸入名稱:”提示。
要解決此問題,您可以在呼叫 getline( 之前使用 std::ws 操縱器跳過任何前導空格,包括換行符)。以下是更新後的代碼:
cout << "Enter number: "; cin >> number; cout << "Enter name: "; cin >> std::ws; getline(cin, str); cout << "Enter account number: "; cin >> accountNumber;
透過此更改,程式將在「輸入名稱:」提示處正確暫停,並允許使用者在繼續之前輸入名稱。
以上是為什麼使用'cin”後'getline()”會跳過輸入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!