0

キーが押されたときにのみ再起動したいループを持つ Win32 GUI アプリを作成しています。メイン ループは既に実行されており、単純に再起動することはできないため、ユーザーが手動で中断できる「ハング」ポイントを挿入する必要があります。以下のコードは、メインループの最後に置いたものを表しています。文字「q」が押されたときにのみ中断できる無限のサブループにプログラムを入れることにより、プログラムを一時停止することになっています。

for (;;)
 {
 char temp;
 temp = _getch();

 if (temp == 'q')
  {
  break;
  }
 }

これにより、プログラムは正常にハングアップしますが、'q' を押してもループは終了しません。cin.ignore() または cin.get() を使用する方が望ましいことは理解していますが、何らかの理由でヘッダーリストに iostream を追加するとエラーが発生するため、現在 _getch( を使用して実行しようとしています。 ) conio.h ヘッダーを使用します。

どんな助けでも大歓迎です。

4

4 に答える 4

2

を呼び出すだけMessageBoxです。

于 2011-08-10T15:13:51.367 に答える
1

あなたの質問からはわかりにくいですが、ループを繰り返すたびに、続行したい場合はユーザーにプロンプ​​トを表示しようとしているようです。無限forループはメイン処理ループの最後にあると思います。

無限ループは必要ありません_getch()。キーが押されるまでとにかく実行を停止します。実際には、条件をループでラップしたという事実が、意図したとおりに動作しないfor理由です。無限ループから抜け出していますが、メインの処理ループからは抜けていません。breakbreak

例:

while(1)
{
   // Do some processing
   for (;;)
   {
      char temp;
      temp = _getch();

      if (temp == 'q')
         break;   // This will break out of the for and continue the while
   }
}

対。

while(1)
{
   // Do some processing
   if ('q' == _getch())
      break;             // This will break out of the while
}

また、_getch() は を返すため、関数の戻りコードをテストするだけでよいことにも気付くでしょう (char後で使用するために入力を保存する必要がない場合)。

于 2011-08-10T15:15:02.003 に答える
0

メッセージ ループを作成し、キーダウン メッセージが到着するまで待機する必要があります。この例を確認してみてください

Windows GUI アプリケーションでは、コンソールから読み取る入力はありません。

于 2011-08-10T15:12:23.297 に答える
0

これは Win32 GUI アプリケーションだとおっしゃいました。ループに入った時点で、入力フォーカスを持つ可能性のあるウィンドウを作成しましたか? そうであれば、WM_KEYDOWN / WM_KEYUPメッセージをトラップしてみてください。コンソール アプリケーションの場合は、コンソール関数を特にReadConsoleで確認してください。

サム

于 2011-08-10T15:27:37.383 に答える