int a; vector<int>res; while(cin>>a){ res.push_back(a); }
給出這段代碼
可以輸入1 2 3 4 5並以回車結束,從而分5次存入res。
也可以輸入 1 2回車3 4 5回車 當然可以這么一直輸入,直到輸入一個任意字符結束
無while僅僅為cin>>a時,若輸入1 2 3 回車 ,此時僅僅存入第一個1。
有個問題:a只是一個變量,不能同時放入5個數據,那么這個數據流到底存在哪,又是怎么依次存入res中的?
猜測為緩沖區有一塊專門的地方放這些數據流
查閱:http://c.biancheng.net/view/1325.html后了解:
當用戶從鍵盤輸入字符時,它們暫時放置在稱為輸入緩沖區或鍵盤緩沖區的內存區域中。當 cin 讀取它們時,會自動將它們轉換為要存儲輸入數據的變量的數據類型。
用戶在輸入數字時要用空格分隔數字。這樣 cin 才能知道每個數字的開始和結束位置。
假如定義:
int whole;
float fractional;
int letter;
當:輸入5.7 4 b 回車
那么,當有如下這段代碼
int a, b; vector<vector<int> >res; for (int i = 0; i < 2; ++i) { vector<int>tmp; while (cin >> a) { tmp.push_back(a); } res.push_back(tmp); }
輸入1 2 3 4 s(s賦值給a會將其置為0)后res內只會有一個結果,for循環的第二次及以后while會被自動跳過,原因是a在緩沖區沒有擦除,cin>>a后的返回值為0??
這時調用什么??? 能正常二次輸入? setwind,fflush,clear,在vs2017內都沒用。暫時還沒找到辦法
當有如下這段代碼
vector<int>res; for (int i = 0; i < 2; ++i) { cin >> a; res.push_back(a);
}
輸入:1 2 3 4
結果:res內為1 2
分析:cin>>a向緩沖區寫入了1 2 3 4但每次a都是取一個放入res,由於for只設置了2個所以最后res內只有前兩個1 2
當有如下這段代碼
char a; int b,c; for(int i=0;i<2;++i){ cin>>a>>b>>c; fun(a,b,c); }
輸入:t 1 2 回車r 2 3
這段代碼可以動態實現fun函數的功能即 :通過for循環先處理fun(t,1,2)再處理fun(r,2,3) 這在線性處理多組數據時非常有用
有點亂,找時間重新理一下,第二段代碼還有問題待解決,有時間再弄
Reference:http://c.biancheng.net/view/1325.html