C++ でユーザ入力を待つ方法
- 
          
            ユーザ入力を待つには cin.get()メソッドを使用する
- 
          
            ユーザ入力を待つために getchar関数を使用する
- 
          
            ユーザの入力を待つには getc関数を用いる
- 
          
            ユーザの入力を待つために system("pause")を使わないようにする
 
この記事では、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 !
        チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
    
