• ベストアンサー

ループを途中で抜けたいのですが。

無限ループさせているwhileやfor文などで、 何かのキーを押すとループを抜けるように設定したいのですが可能でしょうか? (scanfやcinなどをループの中に組み込まずに。ctrl+Cも無しで。) (あと、フォーム上ではなくコンソール上で。) 多分説明不足なのでもうちょっと詳しく。 たとえば、 while ( i != 1 ){ j += 1; } の様な無限ループを設定したとして、 本来なら if (j > 100 ){ break; } とか、 while文の中に scanf ( "%d" , &i ); 等を入れて終了条件を満たさせるべきですが、 そうではなく、ひたすら無限ループを続けているところにEscキーを押すとループから脱出するようなプログラムを作ってみたいのです。 そういうプログラムは可能でしょうか? どうかご教授下さい。 使用コンパイラ:Visual C++ 2008 Express Edition

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★アドバイス ・Windows OS で VC++ ならば kbhit() 関数が便利です。 使用例: #include <conio.h> // ESCのキーコード #define ESC (0x1B) int main( void ) {  while ( !kbhit() || (getch() != ESC) ){    :   無限ループ処理    :  }  return 0; } 解説: ・kbhit()関数はキーバッファにキー情報があるかどうかを調査します。  これによりキーバッファがないときは while 文中が『真』となりループ。 ・キーバッファがあるときは while 文中で getch() 関数より1文字取得。  ここで ESC キー以外なら無限ループ、ESC キーなら無限ループを抜けます。 ・なお kbhit() 関数は非標準の関数です。  VC++なら conio.h ヘッダがあり利用できます。

Deepmist66
質問者

お礼

動作しました! 処理動作にあまり負担をかけなさそうなので、これも使ってみたいと思います。 アドバイスありがとうございました。

その他の回答 (1)

noname#208124
noname#208124
回答No.1

別スレッドで入力を待つ #include <windows.h> #include <tchar.h> #include <stdio.h> #include <process.h> #include <conio.h> #include <intrin.h> long esc; void key (void *dummy) { while (1) { if (0x1b == _getch ()) { _InterlockedIncrement (&esc); break; } } } int _tmain (int argc, TCHAR **argv) { int j = 0; _beginthread (key, 0, NULL); while (1) { if (esc) { break; } printf ("%d\n", j++); } return 0; }

Deepmist66
質問者

お礼

とても早い解答ありがとうございます。 実行してみて、自分が考えていたような動作をしてくれました! これを参考にプログラムを組んでみようと思います。 あと、これは多分マルチスレッドとか呼ばれるものの類ですよね? (扱った事がないので詳しくは分かりませんが。)

関連するQ&A

専門家に質問してみよう