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