最近在使用cin.get()函式時遇到了一個迷惑行為,現已解開,
一、cin.get()的用法
char ch; ch = cin.get(); //第1種用法 cin.get(ch); //第2種用法
二、迷惑行為解密
當你前面呼叫過cin獲取輸入時,呼叫cin.get()函式不會等你等你在螢屏上手動再輸入一個字符,而是直接讀取 你上一次呼叫cin進行輸入時的 最后一個回車字符,
下面來看一下兩份不同的代碼和運行結果,兩份代碼的區別僅僅在第13行,
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 }
相鄰兩次回圈輸出結果的間隔僅為一個空行,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/93404.html
標籤:C++
上一篇:CSAPP:位操作實作基本運算
