C++ でユーザ入力を待つ方法
胡金庫
2023年10月12日
-
ユーザ入力を待つには
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 !