- 締切済み
ループの特定入力終了
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Musaffah
- ベストアンサー率36% (37/101)
コンパイルもコードチェックも何もしてないので、動くかどうかわかりませんが、雰囲気はこんな感じです。 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(); }
- Musaffah
- ベストアンサー率36% (37/101)
マルチスレッドを使うような感じで作るプログラムですか? 1)スレッドを2つ(A,B)実行。 2)スレッドAでは、ひたすら何かをする(無限ループにならない程度)。 3)スレッドBでは、ループ関数を使って"END"が入力されるまで待つ。 4)スレッドBで"END"入力確認にて、スレッドAに終了指令を出す。 5)スレッドAのループ脱出条件は、スレッドBからの終了指令。 こんな感じ?
- Interest
- ベストアンサー率31% (207/659)
こんなイメージですか? #include <stdio.h> #include <conio.h> #include <string.h> #define COMMAND_STRING_SIZE 6 typedef void (*func)(void); typedef struct { char commandString[COMMAND_STRING_SIZE]; func commandFunction; } FUNCTIONMENU; void func1(void){ puts("hogeです。"); } void func2(void){ puts("fugaです。"); } FUNCTIONMENU menuTable[] = { {"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を仕様して います。 その点を踏まえていい案はありませんか?
- hogepuke
- ベストアンサー率33% (1/3)
break; で、ループを抜けれるので、 while() { 処理(); 処理(); if() { /* 特定の条件に当てはまったときにこのループを抜ける */ break; } } みたいな感じで作られたらいかがなものでしょうか。
関連するQ&A
- キーボード入力によるループの終了
C言語で、キーボードから何も入力が無い場合は、同じ処理を一定の時間で続けていき、キーボードから入力(例えばスペースを入力)があった場合のみ、ループを抜ける(処理を終了する)というプログラムを組みたいと思っているのですが、どのようなソース文にすればよいでしょうか。 どなたかよろしくお願いします。
- ベストアンサー
- C・C++・C#
- キーボード入力の終了につきまして(ループ処理内)
いつも参考にさせて頂いております佐藤と申します。 JAVA言語を勉強し初めて数ヶ月程度ですが、楽しさが分かって参りました。 質問させて頂きたい内容は、ループ処理(キーボードや入力ファイルがNULLになるまで繰り返す)でのキーボード入力をどうすれば終了させられるかです。 //読込チェック=NULLならば処理を終了させる while((check = buf.readLine())!=null){ char[] src = check.toCharArray(); ソースの一部ですが、これでは入力ファイルがNULLになれば終了出来ますが、キーボードからの入力だとNULL(何も入力せずにエンター)でも終了しません。 原因が分かる方はいらっしゃいますでしょうか? 宜しくお願い致します。
- 締切済み
- Java
- 永久ループ・・・
どうも、最近C言語の勉強を始めた超初心者です。 int main(void) { int i; for(;;){ printf("桁数を入力してください。:"); scanf("%d",&i); if(i<=12) break; else puts("もう一度入力してください。"); continue; } return(0); } 上のソース、i<=12の条件を満たさなければループを繰り返すというプログラムなんですけど、数値を入力した場合は思った通りに挙動するのですが、文字や文字列を入力すると永久ループになります。scanf関数で返値を受け取って判定するなどいろいろ試したのですが、どうしても永久ループになってしまいます。 どうしてか教えてください。お願いします。
- ベストアンサー
- C・C++・C#
- ある特定も文字'#'が入力されるまで実行
C言語である特定の文字#が入力されるまで 入力し、#が入力されたら、合計を出力するプログラム はどのようだと思われますか? #はgetchar()でとるのが最善でしょうか?
- ベストアンサー
- C・C++・C#
- ループ中でのscanfおよびcin
あまりに基礎的な質問ですが,ループ中の入力関数が期待する動作になりません. コードを載せます while (1) { int key; scanf("%d", &key); if (key == 1) break; } 期待する動作は1が入力されるまでループし続けるというものですが scanfは一度しか実行されずループし続けます,cinに変えても同様でした 何が原因か分かる方,ご教示ください
- 締切済み
- C・C++・C#
- ループを途中で抜けたいのですが。
無限ループさせている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
- ベストアンサー
- C・C++・C#
- 処理KEY入力で終了させる方法
今、学習でC言語を使いCPUのアドレスのデータを表示させるプログラムを組んでいます。 表示させるのは出来たのですが、表示させるたびに、プログラムが終わってしまうので、何回も入力するのがわずらわしい状態です。 例えば、連続でデータが半永久的に表示され、何かKEYを押すだけでそのデータ表示を強制終了 させることは可能でしょうか? ソースは、簡単なのですが、 #include<stdio.h> #define Dout 0x03ff int main { int i; DATA=inp(Dout); printf("DATA:%d\n",DATA); return(0); } while(1)で、無限ループをし、CTRL+Cなどで、抜ける方法はあると思うのですが、それ以外の方法で、プログラムを組むことは可能でしょうか?
- ベストアンサー
- その他(学問・教育)
- ループ途中に強制終了
int main() { while(1){ 繰り返し処理} return 0; } この場合、ブレークを記入しない限り止まらないですね。 止まらない中でEnterキーを押せばループから抜け出して強制終了させるようなコマンドはありますか? 初心者なので丁寧に教えていただければ幸いです。
- ベストアンサー
- C・C++・C#
補足
はい。そのような感じです。 出来ればですが、スレッドAでは無限ループ で行いたいのです。 お願いします。