私はこれを長い間インターネットで探していました。任意のキーを押すとすぐに一時停止が停止し、コードの実行が続行されますが、押したキーが画面に表示されない方法はありますか (system("pause") など)。
人々はcin.get()
そのようなことを言っていましたが、私がそれを使用する場合、任意のキーを押す必要があり、画面に表示された後、Enter キーを押す必要があります。
私はこれを長い間インターネットで探していました。任意のキーを押すとすぐに一時停止が停止し、コードの実行が続行されますが、押したキーが画面に表示されない方法はありますか (system("pause") など)。
人々はcin.get()
そのようなことを言っていましたが、私がそれを使用する場合、任意のキーを押す必要があり、画面に表示された後、Enter キーを押す必要があります。
あなたが参照しているのでsystem("pause")
、Windowsを使用していると思いますので_getch
、任意のキーを待つために使用できます。
Joachim Pileborg_getch
は、Windows 固有の技術ソリューションとして既に言及しています。
しかし、それは問題を探している解決策です...本当に問題がないからです。
コンソール プログラムからの最後の出力を表示するには、次のいずれかの方法を使用できます。
Windows の標準 [cmd.exe] コマンド インタープリターのインスタンスなど、コマンド ラインからプログラムを実行します。
最後に停止するように、IDE からプログラムを実行します。たとえば、Visual Studio では[Ctrl F5]を使用します。
の終了時にブレークポイントを指定して、デバッガーでプログラムを実行します。たとえば、Visual Studio では、そのブレークポイントを追加し、[F5] キーを押して実行します。}
main
特に最初の箇条書きを試してみると、プログラムの最後に やそのようなものがあっても、利点がなく、非常に煩わしい場合があることに気付く_getch
でしょsystem( "pause" )
う。
Windowsについてはわかりませんが(どうやら_getch()
行く方法があるようです)、UNIXでは、およびを使用して標準入力ストリーム(ファイル記述子)0
を非正規モードに設定し、すぐにキーを取得できます。キーの押下が表示されないようにするには、エコーも無効にする必要があります。tcgetattr()
tcsetattr()
termios old_tio, new_tio;
int rc = tcgetattr(0,&old_tio);
new_tio=old_tio;
new_tio.c_lflag &=(~ICANON & ~ECHO);
rc = tcsetattr(0,TCSANOW,&new_tio);
std::string value;
if (std::cin >> value) {
std::cout << "value='" << value << "'\n";
}
rc = tcsetattr(0,TCSANOW,&old_tio);
このコード
ICANON
フラグとECHO
フラグをクリアします残念ながら、これらの設定を扱う移植可能な方法はありません。つまり、プラットフォーム固有の使用法に頼る必要があります。ただし、 andの使用はPOSIX システムに適用できると思います。tcgetattr()
tcsetattr()