C++ でユーザ入力を待つ方法

胡金庫 2023年10月12日
  1. ユーザ入力を待つには cin.get() メソッドを使用する
  2. ユーザ入力を待つために getchar 関数を使用する
  3. ユーザの入力を待つには getc 関数を用いる
  4. ユーザの入力を待つために system("pause") を使わないようにする
C++ でユーザ入力を待つ方法

この記事では、C++ でユーザー入力を待つ方法を紹介します。なお、以下のチュートリアルでは、ユーザ入力の内容はプログラムの実行には無関係であることを前提としています。

ユーザ入力を待つには cin.get() メソッドを使用する

get()std:cin のメンバ関数であり、ストリームから文字を抽出する入力演算子 >> とほぼ同じように動作します。この場合、ユーザ入力の処理に興味がなく、wait 機能を実装するだけでよい場合は、引数なしで get 関数を呼び出すことができます。ただし、この関数は Enter キーが押されたときに戻ることに注意してください。

#include <iostream>
#include <vector>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<char> arr = {'w', 'x', 'y', 'z'};
  int flag;

  flag = cin.get();

  for (auto const& value : arr) cout << value << "; ";
  cout << "\nDone !" << endl;

  return EXIT_SUCCESS;
}

出力:

w; x; y; z;
Done !

ユーザ入力を待つために getchar 関数を使用する

関数 getchar は入力ストリーム(stdin)から 1 文字を読み込むための C 標準ライブラリ関数です。前のものと同様に、このメソッドも改行文字(つまり Enter キーが押されたこと)が返されることを期待しています。getchar はエラーが発生した場合やストリームの終端に遭遇した場合に eof を返します。

#include <iostream>
#include <vector>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<char> arr = {'w', 'x', 'y', 'z'};
  int flag;

  flag = getchar();

  for (auto const& value : arr) cout << value << "; ";
  cout << "\nDone !" << endl;

  return EXIT_SUCCESS;
}

ユーザの入力を待つには getc 関数を用いる

別の方法として、上の例を getc 関数で代用することもできます。getc は任意の入力ストリームから読み込むために FILE *stream 引数を渡すが、ここでは stdin を渡すことにします。この関数は、Enter キーが押されたときにも返します。

#include <iostream>
#include <vector>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<char> arr = {'w', 'x', 'y', 'z'};
  int flag;

  flag = getchar();

  for (auto const& value : arr) cout << value << "; ";
  cout << "\nDone !" << endl;

  return EXIT_SUCCESS;
}

ユーザの入力を待つために system("pause") を使わないようにする

system 関数はシェルコマンドを実行するために用いられ、コマンド名は文字列リテラルとして渡されます。したがって、pause が引数として渡されると、Windows プラットフォームでのみ利用可能な対応するコマンドを実行しようとします。移植性のない system("pause") の方法を使用するよりも、上記のメソッドを使ってカスタムの待機関数を実装するのがベストです。

#include <iostream>
#include <vector>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<char> arr = {'w', 'x', 'y', 'z'};
  int flag;

  system("pause");

  for (auto const& value : arr) cout << value << "; ";
  cout << "\nDone !" << endl;

  return EXIT_SUCCESS;
}

出力:

sh: 1: pause: not found
w; x; y; z;
Done !
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook