C++ で ignore() 関数を使用する
胡金庫
2023年10月12日
この記事では、C++ で ignore()
関数を使用する方法をいくつか説明します。
コマンドラインの不要なユーザ入力を破棄するために ignore()
関数を使用する
関数 ignore()
は std::basic_istream
のメンバ関数であり、異なる入力ストリームクラスから継承されます。この関数は、指定された区切り文字までのストリーム中の文字を破棄し、ストリームの残りの文字を抽出します。
最初の引数は抽出する文字数であり、2 番目の引数はデリミタ文字です。
次の例は、cin
オブジェクトに対して ignore
関数を呼び出し、3つの数値のみを格納し、それ以外のユーザ入力を破棄する方法を示しています。なお、ignore
関数の第一引数に numeric_limits<std::streamsize>::max()
を用いて、特殊文字を強制的に格納し、文字数パラメータを無効にしていることに注意してください。
#include <fstream>
#include <iostream>
#include <limits>
#include <sstream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::istringstream;
using std::numeric_limits;
using std::string;
int main() {
while (true) {
int i1, i2, i3;
cout << "Type space separated numbers: " << endl;
cin >> i1 >> i2 >> i3;
if (i1 == 0) exit(EXIT_SUCCESS);
cin.ignore(numeric_limits<std::streamsize>::max(), '\n');
cout << i1 << "; " << i2 << "; " << i3 << endl;
}
return EXIT_SUCCESS;
}
出力:
Type space separated numbers:
238 389 090 2232 89
238; 389; 90
C++ でユーザ入力の頭文字を抽出するには ignore
関数を用いる
ignore
関数を利用する一般的な方法は、入力ストリームを任意の区切り文字まで探し、必要な文字だけを抽出することです。
以下のコードサンプルでは、スペースで区切られた文字列の頭文字のみが抽出されるようにユーザ入力が解析されています。ストリームから 1 文字を抽出するために cin.get
を 2 回使っていますが、その間にある cin.ignore
文によって、次のスペースを含む前の文字はすべて破棄されます。
#include <fstream>
#include <iostream>
#include <limits>
#include <sstream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::numeric_limits;
using std::string;
using std::vector;
int main() {
char name, surname;
cout << "Type your name and surname: " << endl;
name = cin.get();
cin.ignore(numeric_limits<std::streamsize>::max(), ' ');
surname = cin.get();
cout << "Your initials are: " << name << surname << endl;
return EXIT_SUCCESS;
}
出力:
Type your name and surname:
Tim Cook
Your initials are: TM
著者: 胡金庫