4

私はこれを長い間インターネットで探していました。任意のキーを押すとすぐに一時停止が停止し、コードの実行が続行されますが、押したキーが画面に表示されない方法はありますか (system("pause") など)。

人々はcin.get()そのようなことを言っていましたが、私がそれを使用する場合、任意のキーを押す必要があり、画面に表示された後、Enter キーを押す必要があります。

4

3 に答える 3

4

あなたが参照しているのでsystem("pause")、Windowsを使用していると思いますので_getch、任意のキーを待つために使用できます。

于 2013-12-31T15:03:56.327 に答える
2

Joachim Pileborg_getchは、Windows 固有の技術ソリューションとして既に言及しています。

しかし、それは問題を探している解決策です...本当に問題がないからです。

コンソール プログラムからの最後の出力を表示するには、次のいずれかの方法を使用できます。

  • Windows の標準 [cmd.exe] コマンド インタープリターのインスタンスなど、コマンド ラインからプログラムを実行します。

  • 最後に停止するように、IDE からプログラムを実行します。たとえば、Visual Studio では[Ctrl F5]を使用します。

  • の終了時にブレークポイントを指定して、デバッガーでプログラムを実行します。たとえば、Visual Studio では、そのブレークポイントを追加し、[F5] キーを押して実行します。}main

特に最初の箇条書きを試してみると、プログラムの最後に やそのようなものがあっても、利点がなく、非常に煩わしい場合があることに気付く_getchでしょsystem( "pause" )う。

于 2013-12-31T15:13:58.007 に答える
1

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);

このコード

  1. 最初に端末フラグの現在の状態を取得します
  2. ICANONフラグとECHOフラグをクリアします
  3. 非表示の入力を読み取ります (この場合は文字列ですが、個別のキーにすることもできます)
  4. 元の設定を復元します

残念ながら、これらの設定を扱う移植可能な方法はありません。つまり、プラットフォーム固有の使用法に頼る必要があります。ただし、 andの使用はPOSIX システムに適用できると思います。tcgetattr()tcsetattr()

于 2013-12-31T15:21:14.557 に答える