• ベストアンサー

無限ループを抜け出す方法を教えて下さい。

ご覧いただきありがとうございます。 タイトルの通り、無限ループを抜け出す方法を教えて頂きたいです。 for( ; ; i++) { printf( "%ld", i ); } たとえば、上記の無限ループをキー入力待ちをすること無しに、キー入力があった場合に途中で抜ける方法はあるのでしょうか? ご回答のほどよろしくお願いいたします!!

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

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

★キー入力されたかの判定は『kbhit』関数が便利です。 ・MS-DOS、Windows 系の OS ならば『kbhit』でキー入力の有無をチェックできます。 ・下に簡単なサンプルを載せます。 サンプル: #include <stdio.h> #include <conio.h> ←kbhit()のため long i; for( i = 0 ; !kbhit() ; i++ ){  printf( "%ld\n", i ); } getch(); ←※ 解説: ・for 文の kbhit() 関数がキー入力されたら 0 以外を返し、キー入力がなければ 0 を  返す関数です。これを利用すれば、キー入力があった場合に途中で抜ける事が可能です。  kbhit()関数の参考リンクは。→http://www.geocities.co.jp/SiliconValley-Bay/7437/c/c7.htm ・また、for 文の最後にある getch() 関数は、キー入力があった後に入力された1文字を  読み捨てています。これは、キー入力があって for 文を抜けた後にプログラムが終了する  場合は、コマンドラインなどにキー入力された1文字が入力されてしまうために付け加えています。 ・ただし、kbhit() という関数は Windows 系しか使えないです。  UNIX 系では kbhit() がないため、同様な機能を自前で作ります。  下の『参考URL』をどうぞ。 ・以上。

参考URL:
http://www.ncad.co.jp/~komata/c-kouza24.htm
noname#30991
質問者

お礼

ご回答誠にありがとうございました。 非常にわかりやすい説明で、大変参考になりました。サンプルコードまで記述していただき嬉しく思います。 当方まだまだ初心者で、中級を目指しております。また私の質問をご覧になられた時にはぜひご教授のほどよろしくお願いいたします。 今回はありがとうございます。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

OSによらない汎用的な方法はありません。 ですので、最低限使用するOSを明記してください。

noname#30991
質問者

お礼

さっそくご覧いただきありがとうございます。 失礼いたしました。OSはWindows XPです。