代碼中 `cin >> exp->radius;` 讀取整數後,**緩衝區殘留換行符 `\n`**,接著 `cin.get(exp->band, 20)` 讀取字串時,`getline`/`get` 遇到 `\n` 視為結束,直接讀到空字串,導致無法輸入品牌名。
輸入:123\n ← 使用者輸入半徑 123 並按 Enter
cin >> radius → 讀走 123,緩衝區剩 \n
cin.get() → 吃掉這個 \n
cin.get(band) → 正常等待品牌輸入
cin >> radius;
cin.ignore(); // 或 cin.get(),吃掉一個字元(通常是 \n)
cin.get(band, 20);
#include
cin >> radius;
cin.ignore(std::numeric_limits::max(), '\n'); // 清空到換行
cin.get(band, 20);
string line;
getline(cin, line); radius = stoi(line);
getline(cin, band);
getline(cin, line); weight = stoi(line);
| 函式 | 行為 | 殘留 \n |
|---|---|---|
| `cin >>` | 跳過前導空白,讀到空白停止 | **留下 \n** |
| `cin.get()` | 讀單一字元(含 \n) | 吃掉 \n |
| `cin.getline()` / `getline(cin, str)` | 讀整行(不含 \n) | 吃掉 \n |
養成「`>>` 後緊接 `ignore()`」或「全程用 `getline`」習慣,徹底避免緩衝區殘留問題。