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

C++ cin 讀取字符串遇空格截斷:緩衝區殘留導致連續輸入異常

     編輯:程式設計綜合問答

現象


cin >> name;  // 輸入 "x y"
cout << "Hello," << name;  // 輸出 "Hello,x"
cin >> name;  // 直接讀取緩衝區殘留的 "y",無需再輸入

根因

  • operator>> 對 std::string 以**空白字符**(空格、換行、制表符)為分隔符。
  • 首次讀取 "x" 後," y\n" 留在輸入緩衝區。
  • 第二次 cin >> name 直接消費緩衝區中的 "y",導致看起來「捨棄了 x」。

解決方案

需求方法代碼示例
讀取整行(含空格)std::getlinestd::getline(cin, name);
混用 >> 與 getline先清空緩衝區cin.ignore(numeric_limits::max(), '\n');
逐詞讀取保持 >> 行為理解緩衡區機制,按需調用

修正示例


#include 
#include 
#include 
using namespace std;

int main() {
    cout << "What's your name? ";
    string name;
    getline(cin, name);  // 讀取整行 "x y"
    cout << "Hello, " << name << endl;

    cout << "And what's yours? ";
    getline(cin, name);  // 讀取下一行
    cout << "Hello, " << name << ". Nice to meet you!" << endl;
    return 0;
}

總結

cin >> string 適合單詞輸入;需讀取含空格的完整行,**必須用 std::getline** 並注意清理前序 >> 留下的換行符。

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