C++ cin.sync()和cin.ignore()
cin.sync()的功能是清空緩沖區,而cin.ignore()雖然也是刪除緩沖區中數據的作用,但其對緩沖區中的刪除數據控制的較精確。
有時候你只想取緩沖區的一部分,而舍棄另一部分,這是就可以使用cin.ignore(),其使用方法是:
cin.ignore(int intExp, char chExp);
其中intExp 是一個整型表達式,也可以是一個整型數值,這個數值表示在一行中忽略的字符的最大數目,比如說intExp=100;還有一個參數chExp,是一個字符表達式。表示如果遇到一個字符值等于chEXP,那么就停止ignore(),如果ignore100個字符之后還沒遇到值等于chEXP的字符,那也得停止ignore(),所以100是ignore()所忽略的最大字符數。?
下面是幾個例子
#include<iostream>
#include<cstdlib>
int main()
{
? int ival1 = 0, ival2 = 0;
? std::cin >> ival1;
? std::cin.ignore(100, '\n');
? std::cin >> ival2;
? std::cout << "ival1 = " << ival1 << std::endl;
? std::cout << "ival2 = " << ival2 << std::endl;
? system("pause");
? return 0;
}
?
①按下Enter后,ival1接收了12,剩余的都被清除掉了,因為Enter就是本身就是空行符,然后輸入流會等待第二次輸入為ival2賦值。如過沒有中間那句std::cin.ignore(100, '\n')?,則不會等待第二次輸入,直接輸出ival1 = 12 ival2 = 34:
②把std::cin.ignore(100, '\n')?改成std::cin.ignore(2, '\n')呢,ival1接收了12之后,ignore清除掉兩個字符:
為什么ival2是4而不是78呢?
因為我們所用的IO對象cin cout 都是操縱char數據的,不管我們輸入的是什么數據,cin cout 都會轉成 char來處理,例如我們想要輸出的是一個整形變量的值,那么在輸出前,cout會將該變量的值轉成字符,在進行輸出(C++ Primer Plus中有一句話:In essence, the C++insertion operatoradjusts its behavior to fit the type of data that follows it.),所以上面ignore清除掉了一個空格和一個字符3,所以緩沖區中剩余4、56、78,所以ival2等于4.
③如果cin.ignore()不給參數,則默認參數為cin.ignore(1,EOF),即把EOF前的1個字符清掉。
?
總結
以上是生活随笔為你收集整理的C++ cin.sync()和cin.ignore()的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 指针函数和函数指针
- 下一篇: Vtk出现Generic Warning