從標準輸入(鍵盤)寫入的資料會都存放在輸入快取區,當輸入快取區有資料時,cin會直接從輸入快取區讀取,而當輸入緩衝區沒有資料時,cin會掛起請求使用者輸入資料;
從標準輸入寫入資料,按enter鍵結束此次輸入,而cin >> x;讀取一次資料結束的標誌是空白(包括空格,製表符tab,回車)
表示式cin >> x;
cin 是istream類的乙個物件,表示式cin >> x的返回值;
int i = 2;
cin >> i;
cout << i;
//輸入w,與期望值i的型別int不同,表示式cin >> i返回false,x 的值變為0
//輸出0
綜上,while(cin >> x)當輸入的資料型別與x的型別相同時,會一直執行迴圈,當輸入的型別與預期型別不用時結束迴圈;
一般用於給整形陣列或浮點型陣列賦值,整形陣列和浮點型陣列不可對陣列整體賦值,字元陣列可整體對陣列賦值,如
int array[10];
cin >> array; //會報錯
//輸入 5 6 2 1 3 7 8 9
char str[10];
cin >> str;
cout << str;
//輸入 dsfds
//輸出 dsfds
使用while(cin >> array[idx++])給整形或浮點型陣列賦值
int array1[10];
double array2[10];
int idx = 0; //陣列下標索引
while(cin >> array1[idx++])
//會從陣列下標0開始給陣列賦值,當標準輸入型別與陣列型別不同時,結束迴圈
理解cin>>x;的返回值特性後也就好理解給多個變數賦值cin >> x >> y;的原理了,cin >> x賦值成功返回cin物件,再執行cin >> y;對y賦值,cin >> x 賦值失敗時,x的值變為0,y的值不變;
有兩種讀取方式
char c1;
c1 = cin.get()
cin.get(ci)
cin.get()會從輸入緩衝區讀取乙個字元(即使是換行符也能讀取),
cin.get(array,size)和cin.getline(array,size)都用來讀取一行資料,通過回車鍵來確定結尾,引數包括儲存輸入行陣列名稱,和讀取長度size,如果size=20,則最多讀取19個字元,最後一位用於儲存空字元;
區別:為什麼有時使用cin.get(array,size)讀取一行而不是使用cin.getline(array,size)呢?
使用cin.get(array,size)讀取一行後,再使用cin.get()讀取檢視下一字元是不是換行符即可知道停止讀取的原因,是因為已經讀取了整行或者是由於陣列已經被填滿呢;
c cin使用總結
一 輸入原理 程式的輸入都建有乙個緩衝區,即輸入緩衝區。一次輸入過程是這樣的,當一次鍵盤輸入結束時會將輸入的資料存入輸入緩衝區,而cin函式直接從輸入緩衝區中取資料。正因為cin函式是直接從緩衝區取資料的,所以有時候當緩衝區中有殘留資料時,cin函式會直接取得這些殘留資料而不會請求鍵盤輸入 1 in...
C cin學習筆記
更新中 1.錯誤處理 重要函式 bool cin.good bool cin.bad bool cin.fail bool cin.eof 這四個函式用來測試相應的標誌位是否為1,具體如下 failbit eofbit badbit 所以,ios failbit 100b ios eofbit 01...
C cin速度優化
很多c 的初學者可能會被這個問題困擾,經常出現程式無故超時,最終發現問題處在cin和cout上,甚至有些老oier也會被這個問題困擾,每次只能打scanf和printf,然後一堆的佔位符巨麻煩 這是因為c 中,cin和cout要與stdio同步,中間會有乙個緩衝,所以導致cin,cout語句輸入輸出...