cin.ignore()函數是C++標准輸入流(cin)中的一個方法。cin.ignore()函數中有兩個參數,分別為數值型的a 和 字符型的 ch ,即cin.ignore( a, ch )。它表示從輸入流 cin 中提取字符,提取的字符被忽略,不被使用。而每拋棄一個字符,它都要進行計數和比較字符:如果計數值達到 a 或者被拋棄的字符是 ch ,則cin.ignore() 函數執行終止;否則,它繼續等待。
它的一個常用功能就是用來清除以回車結束的輸入緩沖區的內容,消除上一次輸入對下一次輸入的影響。例如可以這么用,cin.ignore(1024, '\n'),通常把第一個參數設置得足夠大,這樣實際上是為了只有第二個參數 '\n' 起作用,所以這一句就是把回車(包括回車)之前的所以字符從輸入緩沖流中清除出去。
如果默認不給參數的話,默認參數為cin.ignore(1, EOF),即把EOF前的1個字符清掉,沒有遇到EOF就清掉一個字符然后結束。
下面用一個例子簡單說明cin.ignore()函數的用法:
比如我們要求接受輸入一個字符串(沒有空格),然后輸出該字符串。C++代碼如下:
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 char str[30]; 7 cout << "請輸入一個字符串:"; 8 cin >> str; 9 cout << str << endl; 10 11 return 0; 12 }
運行如下圖:
當按下任意鍵時,運行程序會立即退出。如果想讓程序停留一下,不要立即退出。我們很容易想到讓程序末尾再接受一個輸入,輸入任意一個字符后程序退出。因此,我們在原先代碼加上一個輸入即cin.get(),代碼如下:
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 char str[30]; 7 cout << "請輸入一個字符串:"; 8 cin >> str; 9 cout << str << endl; 10 11 cout << "請輸入任意字符結束程序!\n"; 12 cin.get(); 13 14 return 0; 15 }
此時運行如下圖:
按下任意鍵程序仍然會立即退出而不停留,這與我們想要的結果不一致。這是為什么呢?
如果在程序末尾再多接受一個輸入,即在代碼上再加一個cin.get(),再次運行如下圖:
此時輸入字符 a 時,程序沒有立即退出,達到了我們預計的要求。
回過頭來想,為什么加入第一個cin.get()不行呢?那肯定是因為第一個cin.get()獲取了某個字符,仔細考慮一下,不難想到當輸入"hello"過后按下了回車鍵,因而第一個cin.get()獲取到的就是 '\n' 。在不加入第二個cin.get()情況下,我們可以想到用cin.ignore()函數,將cin中提取的 '\n' 忽略掉。具體代碼如下:
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 char str[30]; 7 cout << "請輸入一個字符串:"; 8 cin >> str; 9 cout << str << endl; 10 11 cin.ignore(100, '\n'); 12 cout << "請輸入任意字符結束程序!\n"; 13 cin.get(); 14 15 return 0; 16 }
運行如下:
此時,和加入兩個cin.get()一樣得到相同的結果,加入cin.ignore(100, '\n');這行代碼的作用就是將輸入"hello"過后按下的回車給忽略掉。