cin 本質
cin 是 istream_withassign 類別物件,關聯標準輸入 (鍵盤)。資料流向:鍵盤 → 鍵盤緩衝區 → (按 Enter) → 程式輸入緩衝區 → cin 流 → >> 擷取 → 變數。
提取運算子 >> 行為
- 自動跳過空白字元 (空格、Tab、換行)
- 依目標變數型別解析資料
- 型別不符 → 進入錯誤狀態
流狀態機制
| 狀態 | 條件 | 布林值 | 後續操作 |
| 正常 | 提取成功 | true (非零) | 繼續提取 |
| 錯誤 | 型別不符 / 遇 EOF | false (零) | 所有提取失效 |
範例:錯誤狀態觸發
int a, b;
cin >> a >> b;
// 輸入: 21 abc
// a=21 成功,b 遇 'a' 失敗 → cin 進入錯誤狀態
狀態檢測與迴圈控制
float grade;
cout << "enter grade: ";
while (cin >> grade) { // 提取成功 → true 繼續
if (grade >= 85) cout << grade << " GOOD!" << endl;
if (grade < 60) cout << grade << " fail!" << endl;
cout << "enter grade: ";
}
cout << "The end." << endl;
// 輸入 Ctrl+Z (Win) / Ctrl+D (Unix) → EOF → 迴圈結束
錯誤輸入後的恢復 (進階)
一旦進入錯誤狀態,必須呼叫 cin.clear() 重置旗標,並用 cin.ignore() 清除殘留錯誤字元,才能繼續讀取。標準庫未在基礎教程涵蓋,實務上極重要。
跨平台 EOF 觸發鍵
- Windows (VC++/GCC):
Ctrl+Z 後按 Enter (VC++ 需雙 Enter)
- Linux/macOS (GCC):
Ctrl+D
總結
cin 以狀態機模型運行:正常態可提取,錯誤態鎖死。善用 while(cin >> var) 模式自動處理 EOF 與格式錯誤,是穩健輸入迴圈的黃金法則。理解錯誤狀態不可逆特性,為後續學習 clear()/ignore() 恢復機制鋪路。
- 上一篇文章: C++ get() 三種形態全解析:單字元讀取的精準控制
- 下一篇文章: C++ put() 與 putchar():單字元輸出的輕量級選擇
Copyright ©
程式碼之家 All Rights Reserved