char ch;
string s;
while (cin >> ch)
s.push_back(ch);
cout << s;
三個疑問:
1. 為何 Ctrl+Z 不能結束輸入?C++ 的檔案結束符是什麼?
2. 改成 cin >> ch && ch != '1' 後輸入 hello world1,輸出變成 helloworld,空格去哪了?
3. 如何正確讀取包含空格的整行?
cin 才會進入失敗狀態結束迴圈。0x1A 而非 EOF。operator>> 會跳過空白字元(空格、換行、Tab)cin >> ch 讀取的是非空白字元,空格被丟棄,所以 hello world 變成 helloworld。// 方法一:getline(最常用)
string line;
while (getline(cin, line)) {
cout << line << '\n';
}
// 方法二:cin.get() 逐字元讀取(保留空格)
char ch;
while (cin.get(ch)) { // 回傳 istream&,隱性轉 bool 判斷狀態
cout << ch;
}
// 方法三:noskipws 操控子(讓 operator>> 不跳過空白)
cin >> noskipws;
char c;
while (cin >> c) { /* ... */ }
cin >> ch 會吞掉空格,需用 getline 或 cin.get() 讀取完整行。