cin.ignore()的用法


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"過后按下的回車給忽略掉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM