C++ 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 operator adjusts 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個字符清掉。

Tags: