int num; cin >> num; // 輸入 3 並按 Enter
string line;
getline(cin, line); // 若無此行,下一行 getline 讀到空字串
for (int i=1; i<=num; i++) {
getline(cin, line);
numlist.push_back(line);
}
operator>> 讀取整數時,停留在換行符 '\n' 之前(不會消耗換行符)。緊接著的 getline 讀取至換行符,發現緩衝區第一個字元就是 '\n',因此回傳空字串並消耗該換行符。
cin >> num;
getline(cin, line); // 吃掉 '\n'
cin >> num;
cin.ignore(numeric_limits::max(), '\n'); // 忽略至換行符
需 #include 。
string tmp; getline(cin, tmp); num = stoi(tmp);
for (...) { getline(cin, line); ... }
> 與 getline 時,**緊接在 >> 之後呼叫一次 getline 或 ignore** 成習慣。cin >> num; string s; getline(cin, s);。getline,乾脆開頭就 getline(cin, s) 讀第一行再轉換。理解「格式化輸入留下分隔符」特性,即可避免此類空行陷阱。