2017-11-13 15 views
0

これはおそらくどこかで答えられました。私はちょうどそれに答えを見つけるように見えるかもしれません。とにかく、私は特定の回数をループするプログラムを作っていますが、ユーザがスペースバーを押してユーザが何かを入力しているという事実を引き起こした後に、ユーザの入力を取りたいと思っています。今、私の論理はオフかもしれませんが、これが私が試みていることです。ユーザ入力で「ループ割り込み」が可能ですか?

for (int i = 0 ; i < length (user input from before); i++){ 
    do{ 
     cout << "Hello World" << endl; 
    }while(cin.getch() == ' '); 
    } 

プログラムから見ると、イテレータが増えるたびに停止します。私はちょっとなぜそれが毎回止まっているのかを確かめていますが、どうやってループするので、ユーザーがスペースキーを押すと止まるのですか?

+0

getCh()を独自のスレッドに入れます。その後、追加された複雑さを楽しむ:)あなたがDOS割り込み9とコールバックを使用することができたときに戻る。今、私はこれが最善の方法だと思います。 –

+0

@Michael Dorgan imはちょっと正直で、それを自分のスレッドに入れることで何を意味するのか尋ねます。 – eM3e

+0

これは良い答えです:https://stackoverflow.com/questions/6171132/non-blocking-console-input-c –

答えて

1

getchはブロック機能です。つまり、入力バッファが空の場合、現在のスレッドをブロックしてユーザーの入力を待機します。一方で何か作業したい場合は、別のスレッドを生成する必要があります。メインスレッドがユーザー入力を待つ間、 "ワーカー"の新しいスレッドを開始する次のコードを参照してください。それが何とか役立つことを願っています。

#include <iostream> 
#include <thread> 

struct Worker { 
    Worker() : stopped(false) {}; 
    void doWork() { 
     while (!stopped) { 
      cout << "Hello World!" << endl; 
     } 
     cout << "Stopped!" << endl; 
    } 
    atomic<bool> stopped; 

}; 

int main(){ 

    Worker w; 
    thread thread1(&Worker::doWork,&w); 

    int c; 
    while ((c = getchar()) != ' '); 

    w.stopped = true; 

    thread1.join(); // avoid that main thread ends before the worker thread. 
} 
+0

これは間違っても重要ではないかもしれませんが、C++でないCのことを "構造化"していませんか?クラスを使うのは難しいですね。 – eM3e

+0

@ eM3e:C++はボットクラスと構造体を提供します。 C++の 'struct'はクラスとほぼ同じ意味を持ちます。唯一の違いは、デフォルトではすべてのメンバーが公開されていることです。 –

関連する問題