• ベストアンサー

あるキーを押したら強制終了させるには。

Cの初心者です。 ある文字列をスクロールさせるプログラムを作りました。 ソースは以下です。 *********************************************** #include<stdio.h> #include<string.h> void wait(long x) { int i; for(i=0;i<x;i++){/* do nothing */} } int main(void) { char name[]="Hello OK Wave"; int i; int len=strlen(name); int time=0; while(1){ printf("\r"); for(i=0;i<=len;i++){ if(time+i<=len){ printf("%c",name[time+i]); } else { printf("%c",name[time+i-len-1]); } } time++; if(time>len){time=0;} wait(1000000000); } return(0); } ********************************************* (ちなみにコンパイル時最後のリターン文が実行されないという警告が出ます) 一応これで目的の動作はしてくれるのですが、 これですとwhile(1)の中を延々と続けているのでプログラムを終了させるために いちいちコマンドプロンプトごと終了させなければいけません。 (ちなみにコマンドプロンプト自体のコマンドはよくわからないです) これですとなんだか嫌な感じなので、あるキー、たとえば'Q'を押したら プログラムが終了してくれるようなことが出来ないだろうかと思っています。 exit(1)を使うのかな?と思いましたがどのようにキーを押したかの判定などを すればよいのか悩んでいます。 どうかよろしくお願いいたします。

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

  • ベストアンサー
  • amru05
  • ベストアンサー率63% (33/52)
回答No.3

初心者には難しい問題ですね。。OSに依存する機能なので。。。。 <基本的考え方> 1.2つの動作(終了入力を待つ事と別な処理)を、並列に実行する必要がある。  ==>マルチプロセスやマルチスレッドの動作が   必要。その使用方法はOSで異なる。 2.fork/beginthreadnなどの関数で並列動作を行う。 3.片方の処理は入力を待ち、もう一方で実際の処理を 行う。 4.終了の入力があったら、別プロセス・スレッドを終了して、全体を終了する。 <その他>  プロセス、スレッドなどで検索してみて下さい。

参考URL:
http://www.ncad.co.jp/~komata/c-kouza28.htm
R-gray
質問者

お礼

確かにお話を聞いてると難しそうです笑。 マルチスレッドはJavaの本で目にしたことがありますが・・・。 勉強してみます。ありがとうございました。

その他の回答 (2)

  • invalid
  • ベストアンサー率61% (67/109)
回答No.2

コマンドプロンプト内では CTRL+Cで実行中のコマンドを強制終了できますが それでは駄目なのでしょうか?

R-gray
質問者

お礼

現時点ではこれで事足ります。 ありがとうございました!

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

標準関数ではないですが、 kbhit が使えるのであれば、これでキー入力があったことがわかります。 キー入力が有った時に getch または、getche でキー入力を受けるといいかと思います。

R-gray
質問者

お礼

はじめて聞く関数です。 調べてみます。ありがとうございました!

関連するQ&A

専門家に質問してみよう