C++ でプログラムを一時停止する方法
胡金庫
2023年10月12日
この記事では、C++ でプログラムを一時停止する方法をいくつか説明します。
プログラムを一時停止するには getc()
関数を使用する
関数 getc()
は C 標準入出力ライブラリのものであり、与えられた入力ストリームから次の文字を読み込む。入力ストリームは FILE*
型であり、この関数はストリームが開かれることを期待します。ほとんどすべての Unix システムでは、プログラムの起動時に 3つの標準ファイルストリームがオープンされます。すなわち、stdin
、stdout
および stderr
です。以下の例では、stdin
を引数に渡して、ユーザがプログラムの実行を続けるのを待つために、コンソール入力に対応します。
#include <chrono>
#include <iostream>
#include <thread>
using std::copy;
using std::cout;
using std::endl;
using std::this_thread::sleep_for;
using namespace std::chrono_literals;
int main() {
int flag;
cout << "Program is paused !\n"
<< "Press Enter to continue\n";
// pause the program until user input
flag = getc(stdin);
cout << "\nContinuing .";
sleep_for(300ms);
cout << ".";
cout << ".";
cout << ".";
cout << "\nProgram finished with success code!";
return EXIT_SUCCESS;
}
出力:
Program is paused !
Press Enter to continue
Continuing ....
Program finished with success code!
プログラムを一時停止するには std::cin::get()
メソッドを用いる
プログラムを一時停止するもう一つの方法は、std::cin
組み込みのメソッド get
を呼び出すことであり、パラメータで指定された入力ストリームから文字を抽出します。この場合、1 文字を読み込んで実行中のプログラムに制御を返すだけです。
#include <chrono>
#include <iostream>
#include <thread>
#include <vector>
using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;
using std::this_thread::sleep_for;
using namespace std::chrono_literals;
int main() {
int flag;
cout << "Program is paused !\n"
<< "Press Enter to continue\n";
// pause the program until user input
flag = cin.get();
cout << "\nContinuing .";
sleep_for(300ms);
cout << ".";
cout << ".";
cout << ".";
cout << "\nProgram finished with success code!";
return EXIT_SUCCESS;
}
プログラムの一時停止には getchar()
関数を用いる
別の方法として、getchar
関数呼び出しで同じ機能を再実装することもできます。getchar
は getc(stdin)
と同等の呼び出しであり、コンソール入力ストリームから次の文字を読み出す。
どちらの関数も EOF
を返す可能性があることに注意してください。これはファイルの終端に達したこと、つまり読み込める文字がないことを示しています。例外的な制御フローや返されたエラーコードを処理する責任はプログラマにあります。
#include <chrono>
#include <iostream>
#include <thread>
#include <vector>
using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::vector;
using std::this_thread::sleep_for;
using namespace std::chrono_literals;
int main() {
int flag;
cout << "Program is paused !\n"
<< "Press Enter to continue\n";
// pause the program until user input
flag = getchar();
cout << "\nContinuing .";
sleep_for(300ms);
cout << ".";
cout << ".";
cout << ".";
cout << "\nProgram finished with success code!";
return EXIT_SUCCESS;
}