C 輸入cin詳解

2021-08-08 09:17:07 字數 2569 閱讀 7191

輸入原理:

程式的輸入都建有乙個緩衝區,即輸入緩衝區。一次輸入過程是這樣的,當一次鍵盤輸入結束時會將輸入的資料存入輸入緩衝區,而cin函式直接從輸入緩衝區中取資料。正因為cin函式是直接從緩衝區取資料的,所以有時候當緩衝區中有殘留資料時,cin函式會直接取得這些殘留資料而不會請求鍵盤輸入

#1:#include using namespace std;

int main()

{ char str[8];

cin.getline(str, 5);

cout<

測試:abcdefgh (回車)

abcd (輸出) 

(輸出-換行)

【分析】之所以第一次輸入完後直接程式就結束了,而不是進行第二次輸入,是因為第一次多輸入的資料還殘留在快取區中,第二次輸入就直接從快取區中提取而不會請求鍵盤輸入,以下**幾種常見的輸入方式:

一. cin>>

該操作符是根據後面變數的型別讀取資料。

輸入結束條件 :遇到enter、space、tab鍵。

對結束符的處理 :丟棄緩衝區中使得輸入結束的結束符(enter、space、tab)

#2:#include using namespace std;

int main()

{ char str1[10], str2[10];

cin>>str1;

cin>>str2;

cout《測試:

abcd efgh

輸出:abcd

efgh

【分析】第一次讀取字串時遇到空格則停止了,將abcd讀入str1,並捨棄了空格,將後面的字串給了第二個字串。這證明了cin讀入資料遇到空格結束;並且丟棄空格符;緩衝區有殘留資料,讀入操作直接從緩衝區中取資料。

二.cin.get(陣列名,長度,結束符)

其中結束符為可選引數,讀入的字元個數最多為(長度-1)個,結束符規定結束字串讀取的字元,預設為enter

若要讀取字元,直接cin.get(char ch)或ch=cin.get()即可

讀取字元的情況:

輸入結束條件:enter鍵

對結束符處理:不丟棄緩衝區中的enter

cin.get() 與 cin.get(char ch)用於讀取字元,他們的使用是相似的,

即:ch=cin.get() 與 cin.get(ch)是等價的。

#3:#include using namespace std;

int main()

{  char c1, c2;

cin.get(c1);

cin.get(c2);

cout《測試一輸入:

a[enter]

輸出:a

97 10

【分析】會發現只執行了一次從鍵盤輸入,顯然第乙個字元變數取的』a', 第二個變數取的是enter(ascii值為10),這是因為該函式不丟棄上次輸入結束時的enter字元,所以第一次輸入結束時緩衝區中殘留的是上次輸入結束時的enter字元!

測試二輸入:

a b[enter]

輸出:a

97 32

【分析】顯然第乙個字元變數取的』a', 第二個變數取的是space(ascii值為32)。原因同上,沒有丟棄space字元。

讀取字串的情況:

輸入結束條件:預設enter鍵(因此可接受空格,tab鍵),可在第三個引數上自定義結束符

對結束符處理:丟棄緩衝區中的enter

#4:#include using namespace std;

int main ()

{  char ch, a[20];

cin.get(a, 5 , 'd');

cin>>ch;

cout《測試一輸入:

12345[enter]

輸出:1234

53【分析】第一次輸入超長,字串按長度取了"1234",而』5′仍殘留在緩衝區中,所以第二次輸入字元沒有從鍵盤讀入,而是直接取了』5′,所以列印的ascii值是53(』5′的ascii值)。

測試二輸入:

12d45[enter]

輸出:12

d【分析】第二次輸出為d,說明自定義結束符時不丟棄緩衝區中的結束符

三.cin.getline()

cin.getline(陣列名,長度,結束符) 大體與 cin.get(陣列名,長度,結束符)類似。

區別在於:

cin.get()當輸入的字串超長時,不會引起cin函式的錯誤,後面的cin操作會繼續執行,只是直接從緩衝區中取資料。但是cin.getline()當輸入超長時,會引起cin函式的錯誤,後面的cin操作將不再執行。

#5:#include using namespace std;

int main ()

{  char ch, a[20];

cin.getline(a, 5);

cin>>ch;

cout《測試輸入:

12345[enter]

輸出:1234

-52【分析】與cin.get()的例子比較會發現,這裡的ch並沒有讀取緩衝區中的5,而是返回了-52,這裡其實cin>>ch語句沒有執行,是因為cin出錯了!cin的錯誤處理下次介紹。

C 輸入cin詳解

輸入原理 程式的輸入都建有乙個緩衝區,即輸入緩衝區。一次輸入過程是這樣的,當一次鍵盤輸入結束時會將輸入的資料存入輸入緩衝區,而cin函式直接從輸入緩衝區中取資料。正因為cin函式是直接從緩衝區取資料的,所以有時候當緩衝區中有殘留資料時,cin函式會直接取得這些殘留資料而不會請求鍵盤輸入 1 incl...

C 輸入cin詳解

輸入原理 程式的輸入都建有乙個緩衝區,即輸入緩衝區。一次輸入過程是這樣的,當一次鍵盤輸入結束時會將輸入的資料存入輸入緩衝區,而cin函式直接從輸入緩衝區中取資料。正因為cin函式是直接從緩衝區取資料的,所以有時候當緩衝區中有殘留資料時,cin函式會直接取得這些殘留資料而不會請求鍵盤輸入 1 incl...

C 輸入cin詳解

輸入原理 程式的輸入都建有乙個緩衝區,即輸入緩衝區。一次輸入過程是這樣的,當一次鍵盤輸入結束時會將輸入的資料存入輸入緩衝區,而cin函式直接從輸入緩衝區中取資料。正因為cin函式是直接從緩衝區取資料的,所以有時候當緩衝區中有殘留資料時,cin函式會直接取得這些殘留資料而不會請求鍵盤輸入 1 incl...