[問題] getline 跟 cin
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux g++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
#include <iostream>
問題(Question):
不了解getline 跟 cin 的行為差別
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <iostream>
using namespace std;
int main(){
string test1;
string test2;
cin >> test1;
getline(cin,test2);
cout << test1 << endl << test2 << endl;
}
小弟我寫這樣的話 假設餵入 TestString 一次
那麼輸出會是
TestString
\n
它不會等我餵下一行給getline這個function 就直接結束掉了
而如果在cin >> test1 跟 getline(cin,test2)
中間加入了 cin.ignore(); 就會等我了
--------------------------我是分隔線---------------------------------
另外一個程式是
#include <iostream>
using namespace std;
int main(){
string test1;
string test2;
getline(cin,test1);
getline(cin,test2);
cout << test1 << endl << test2 << endl;
}
在第一次輸入TestString 之後 它就直接會等我再輸入下一個string 這樣
小弟的問題來了
1.
cin >> 這個method 的行為還是不是很了解
cin >> 參數a 這行做完之後 緩衝區裡面到底會不會有東西呢?
如果會的話 上面第一個case 可以解釋
但是為什麼像是 cin >> int a >> int b ; 這樣的東西就不會出錯?
就可以讓使用者輸入兩個int 參數
(cin >> int a => 歡衝區裡面還有a的值 應該會直接餵給b嗎!?)
2.
cin >> 跟 getline 回傳的參數跟傳入的參數都是參考型態(&)
為什麼兩個的行為會不一樣阿?
以上面兩分code的例子來看
感覺像是cin 不會自動把緩衝區清掉 導致getline吃到緩衝區裡面剩下來的東西
getline 卻在讀入一次結束後 會自動把緩衝區清掉嗎?
不知道這樣問夠不夠清楚@@
基本上就是想知道為什麼上面兩分code行為會不一樣就是了XD
謝謝大家
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.244.131
推
05/01 13:34, , 1F
05/01 13:34, 1F
→
05/01 15:16, , 2F
05/01 15:16, 2F
→
05/01 15:16, , 3F
05/01 15:16, 3F
→
05/01 16:41, , 4F
05/01 16:41, 4F
→
05/01 16:48, , 5F
05/01 16:48, 5F
→
05/01 16:54, , 6F
05/01 16:54, 6F
→
05/01 17:07, , 7F
05/01 17:07, 7F
→
05/01 17:07, , 8F
05/01 17:07, 8F
→
05/01 17:08, , 9F
05/01 17:08, 9F
→
05/01 17:18, , 10F
05/01 17:18, 10F
→
05/01 17:30, , 11F
05/01 17:30, 11F
→
05/01 17:30, , 12F
05/01 17:30, 12F
→
05/01 17:31, , 13F
05/01 17:31, 13F
→
05/01 17:35, , 14F
05/01 17:35, 14F
→
05/01 17:36, , 15F
05/01 17:36, 15F
→
05/01 17:38, , 16F
05/01 17:38, 16F
→
05/01 17:38, , 17F
05/01 17:38, 17F
→
05/01 17:41, , 18F
05/01 17:41, 18F
→
05/01 17:42, , 19F
05/01 17:42, 19F
→
05/01 17:42, , 20F
05/01 17:42, 20F
→
05/01 17:53, , 21F
05/01 17:53, 21F
→
05/01 21:07, , 22F
05/01 21:07, 22F
推
10/26 01:18, , 23F
10/26 01:18, 23F