程式碼中先用 getline(cin, str) 讀整行,再用 cin >> num 讀整數,結果迴圈跑不出去。原因是 getline 讀取並丟棄換行符,但 cin >> num 讀完整數後**留下換行符在緩衝區**,下一輪 getline 直接讀到這個空行,導致邏輯異常。
while (getline(cin, str)) {
istringstream record(str);
record >> name >> number;
cout << "string" << endl;
cin >> num; // 讀完整數後,'\n' 留在緩衝區
}
cin >> num;
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 丟棄剩餘換行符
string line;
while (getline(cin, line)) {
if (line.empty()) continue;
istringstream iss(line);
if (iss >> name >> number) {
// 處理 name, number
getline(cin, line); // 讀取下一行作為 num
istringstream iss2(line);
iss2 >> num;
}
}
不要在同一程式中混用 formatted input (operator>>) 與 unformatted input (getline/get),除非你手動管理緩衝區換行符。