cin.get()解密

最近在使用cin.get()函數時遇到了一個迷惑行爲,現已解開。函數

1、cin.get()的用法spa

char ch;
ch = cin.get(); //第1種用法
cin.get(ch);    //第2種用法

2、迷惑行爲解密code

當你前面調用過cin獲取輸入時,調用cin.get()函數不會等你等你在屏幕上手動再輸入一個字符,而是直接讀取 你上一次調用cin進行輸入時的 最後一個回車字符blog

下面來看一下兩份不一樣的代碼和運行結果,兩份代碼的區別僅僅在第13行。ci

 1 void test() {
 2     char ch;
 3     int todo = 1;
 4 
 5     cout << "請輸入字符:";
 6     cin.get(ch);           //前面未調用過cin,會在屏幕等待你輸入
 7     cout << "輸入字符爲:" << ch << endl << endl;
 8 
 9     cout << "輸入1繼續,輸入0結束:";
10     cin >> todo;
11     while (todo) {
12         cout << "請輸入字符:";
13         //cin.get();       
14         cin.get(ch);       //前面調用過cin,此時不會等待你在屏幕上輸入,而是直接讀取上一次調用cin最後輸入的回車給ch
15         cout << "輸入字符爲:" << ch << endl << endl;
16 
17         cout << "輸入1繼續,輸入0結束:";
18         cin >> todo;
19     }
20 }
正常狀況下相鄰兩次循環輸出結果的間隔僅爲一個空行,可是從第2次循環開始間隔爲兩個空行,這是由於第14行代碼讀取了換行符並在下一行輸出。

 

 1 void test() {
 2     char ch;
 3     int todo = 1;
 4 
 5     cout << "請輸入字符:";
 6     cin.get(ch);           //前面未調用過cin,會在屏幕等待你輸入
 7     cout << "輸入字符爲:" << ch << endl << endl;
 8 
 9     cout << "輸入1繼續,輸入0結束:";
10     cin >> todo;
11     while (todo) {
12         cout << "請輸入字符:";
13         cin.get();         //前面調用過cin,先用cin.get()吃掉上一次調用cin最後輸入的回車
14         cin.get(ch);       //此時能夠正常輸入字符給ch
15         cout << "輸入字符爲:" << ch << endl << endl;
16 
17         cout << "輸入1繼續,輸入0結束:";
18         cin >> todo;
19     }
20 }
相鄰兩次循環輸出結果的間隔僅爲一個空行。
相關文章
相關標籤/搜索