首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ getline 讀取需按兩次 Enter:殘留換行符導致,cin.ignore() 清理緩衝區

     編輯:程式設計綜合問答

程式先用 cin.getline(charr, 20) 讀一行,再用 getline(cin, str) 讀下一行,結果需按兩次 Enter。原因:cin.getline 讀取並**丟棄**分隔符 (換行),但若輸入超過 19 字元,**多餘字元殘留在緩衝區**,導致後續 getline 立即讀到空行。

修正

cin.getline(charr, 20);
cin.ignore(numeric_limits::max(), '\n'); // 清空殘留
getline(cin, str);

最佳實踐

  • 全程統一用 std::string + getline(cin, str),避免 C 風格緩衝區殘留問題。
  • 若必須混用,每次切換前呼叫 cin.ignore() 清理。
  • VS2005 測試未重現,可能因編譯器/標準庫實作差異;加上 ignore 可跨平台穩定。

養成「切換輸入方式前清理緩衝區」習慣,杜絕多按 Enter 問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved