dポイントプレゼントキャンペーン実施中!

C言語初心者です。よろしくお願いします。

whileなどのループ関数を使って、キーボード
入力をするたびに、ループが一度走る事は、
可能です。ですが、
常にループは走らせながらendなどの特定
の入力をされた場合に、ループを抜ける
プログラムをどうしてもできません。

わかる方、教えていただければ幸いです。

A 回答 (4件)

コンパイルもコードチェックも何もしてないので、動くかどうかわかりませんが、雰囲気はこんな感じです。



main()関数で無限ループし、スレッド(thd_func())で無限ループを抜けるか(main()を終了させるか)チェックするという単純なものです。

UNIX(LINUX)系のCでスレッド生成方法知らないので、Windows系で書きました。Windows系のスレッド生成方法は参考URLを見てください。

これで分かります??


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <proccess.h>


#ifdef TRUE
#define TRUE 1
#endif
#ifdef FALSE
#define FALSE 0
#endif

void thd_func(void);

void main(){
int isLoop;

isLoop = TRUE;

_beginthread(thd_func, 0, (void *)&isLoop);

while (g_isLoop == TRUE) {
<<何か処理をいれる>>
}
}

void thd_func(void *p_isLoop) {
char inp[256];

do {
scanf("%s", inp);
} while(strcmp(inp, "END") != 0);
*p_isLoop = FALSE;
_endthread();
}

参考URL:http://msdn.microsoft.com/library/ja/default.asp …
    • good
    • 1

マルチスレッドを使うような感じで作るプログラムですか?



1)スレッドを2つ(A,B)実行。
2)スレッドAでは、ひたすら何かをする(無限ループにならない程度)。
3)スレッドBでは、ループ関数を使って"END"が入力されるまで待つ。
4)スレッドBで"END"入力確認にて、スレッドAに終了指令を出す。
5)スレッドAのループ脱出条件は、スレッドBからの終了指令。

こんな感じ?

この回答への補足

はい。そのような感じです。
出来ればですが、スレッドAでは無限ループ
で行いたいのです。

お願いします。

補足日時:2006/12/27 12:09
    • good
    • 0

こんなイメージですか?



#include <stdio.h>
#include <conio.h>
#include <string.h>

#define COMMAND_STRING_SIZE6

typedef void (*func)(void);
typedef struct {
charcommandString[COMMAND_STRING_SIZE];
funccommandFunction;
} FUNCTIONMENU;

void func1(void){puts("hogeです。");}
void func2(void){puts("fugaです。");}

FUNCTIONMENUmenuTable[] = {
{"hoge",func1},
{"fuga",func2},
{"quit",NULL},
{NULL,NULL}
};

void main(void)
{

char buffer[100];
int i=0;

buffer[0] = '\0';
while(1){

/* キー入力をバッファに保存する。*/
while(kbhit()){
gets(buffer);
break;
}
/* 保存したバッファの中身で、実行すべき処理を選ぶ。*/
if( strlen(buffer) ){
for(i=0; NULL!=menuTable[i].commandString[0]; i++){

if(0 == strcmp(buffer, menuTable[i].commandString) ){
if( 0 == strcmp("quit",buffer) )
goto END;
else{
menuTable[i].commandFunction();
buffer[0] = '\0';
break;
}
}
}

}

/* -- キー入力に関係なく、常に実行したい処理はこちらに書く。-- */


/* ------------------------------------------------------------ */

}/* end of while(1) */

END:

return;
}

動作確認図済みですが、質問者さんのレベルをまったく考慮せず、玄人好みに作ってしまいました。申し訳ありません。

この回答への補足

お早いお返事有難うございます。

このようにプログラムを書いてみた所、<conio.h>が
無いとなりました。これを調べたところ、windowsOSで
出来ないみたいです。こちらでは、LinuxOSを仕様して
います。

その点を踏まえていい案はありませんか?

補足日時:2006/12/27 12:11
    • good
    • 0

break;


で、ループを抜けれるので、
while() {
処理();
処理();
if() {
/* 特定の条件に当てはまったときにこのループを抜ける */
break;
}
}
みたいな感じで作られたらいかがなものでしょうか。
    • good
    • 0

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

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