プロが教えるわが家の防犯対策術!

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)を使うのかな?と思いましたがどのようにキーを押したかの判定などを
すればよいのか悩んでいます。
どうかよろしくお願いいたします。

A 回答 (3件)

初心者には難しい問題ですね。

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

参考URL:http://www.ncad.co.jp/~komata/c-kouza28.htm
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/15 18:41

コマンドプロンプト内では


CTRL+Cで実行中のコマンドを強制終了できますが
それでは駄目なのでしょうか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/15 18:40

標準関数ではないですが、


kbhit が使えるのであれば、これでキー入力があったことがわかります。
キー入力が有った時に
getch または、getche でキー入力を受けるといいかと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/05/15 18:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています