c++ 標準庫中 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++代碼如下:

#include <iostream>
using namespace std;
 
int main()
{
    char str[30];
    cout << "請輸入一個字符串:";
    cin >> str;
    cout << str << endl;
 
    return 0;
}
運行如下圖:

當按下任意鍵時,運行程序會立即退出。如果想讓程序停留一下,不要立即退出。我們很容易想到讓程序末尾再接受一個輸入,輸入任意一個字符後程序退出。因此,我們在原先代碼加上一個輸入即cin.get(),代碼如下:

#include <iostream>
using namespace std;
 
int main()
{
    char str[30];
    cout << "請輸入一個字符串:";
    cin >> str;
    cout << str << endl;
 
    cout << "請輸入任意字符結束程序!\n";
    cin.get();
 
    return 0;
}
此時運行如下圖:


按下任意鍵程序仍然會立即退出而不停留,這與我們想要的結果不一致。這是爲什麼呢?

如果在程序末尾再多接受一個輸入,即在代碼上再加一個cin.get(),再次運行如下圖:

此時輸入字符 a 時,程序沒有立即退出,達到了我們預計的要求。

回過頭來想,爲什麼加入第一個cin.get()不行呢?那肯定是因爲第一個cin.get()獲取了某個字符,仔細考慮一下,不難想到當輸入"hello"過後按下了回車鍵,因而第一個cin.get()獲取到的就是 '\n' 。在不加入第二個cin.get()情況下,我們可以想到用cin.ignore()函數,將cin中提取的 '\n' 忽略掉。具體代碼如下:

#include <iostream>
using namespace std;
 
int main()
{
    char str[30];
    cout << "請輸入一個字符串:";
    cin >> str;
    cout << str << endl;
 
    cin.ignore(100, '\n');
    cout << "請輸入任意字符結束程序!\n";
    cin.get();
 
    return 0;
}

運行如下:


此時,和加入兩個cin.get()一樣得到相同的結果,加入cin.ignore(100, '\n');這行代碼的作用就是將輸入"hello"過後按下的回車給忽略掉。
————————————————
版權聲明:本文爲CSDN博主「micro小寶」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wxbmelisky/article/details/48596881

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章