首頁 >後端開發 >C++ >為什麼使用'cin”後'getline()”會跳過輸入?

為什麼使用'cin”後'getline()”會跳過輸入?

Barbara Streisand
Barbara Streisand原創
2024-12-08 19:21:10840瀏覽

Why Does `getline()` Skip Input After Using `cin`?

解決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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn