首頁  >  文章  >  後端開發  >  為什麼我的 C 輸入循環跳過 getline() 呼叫?

為什麼我的 C 輸入循環跳過 getline() 呼叫?

Linda Hamilton
Linda Hamilton原創
2024-11-15 13:24:02151瀏覽

Why is My C   Input Loop Skipping getline() Calls?

C 輸入循環中getline() 的意外行為

在嘗試從控制台獲取用戶輸入時,開發人員遇到了令人費解的問題getline() 函數的問題。與預期相反,程式在第一次呼叫 getline() 後未能等待輸入,立即繼續進行後續呼叫。

提供的程式碼片段說明了有問題的部分:

getline(cin, inputString);
getline(cin, inputString);

此行為是由於同一輸入循環中 getline() 和輸入運算符 (>>) 的組合引起的。而>>跳過前導空格,它無法消耗尾隨換行符。當呼叫 getline() 時,換行符號保留在輸入緩衝區中,並被解釋為下一個輸入的一部分。

解決方案:

解決此問題,必須始終使用 getline() 或 >>整個輸入循環。如果所有輸入都是數字或可以有效解析,>>>是一個合適的選擇。但是,如果涉及字串或混合資料類型,則應使用 getline() 並手動從輸入字串中提取數值。

程式碼重構:

對所有輸入使用getline():

getline(cin, inputString);
getline(cin, inputString);
getline(cin, inputUInt);
getline(cin, inputUInt);
getline(cin, inputDouble);

或者,使用>>對於所有數字輸入:

cin >> inputString;
cin >> inputString;
cin >> inputUInt;
cin >> inputUInt;
cin >> inputDouble;

以上是為什麼我的 C 輸入循環跳過 getline() 呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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