0

実行中に Ctrl + C を使用せずに無限ループから抜け出す方法はありますか? そのような方法を他のプログラムに実装したいと思います。この例のプログラムのように:

#include <iostream>

int main()
{
     int x = 0;
     for(;;)
         cout << x;
}

for ループを継続する方法はありますが、いつでもいくつかのキーで中断できます。また、break; の使用を理解していることも説明する必要がありますが、ループを続行したいのです。このようなブレーク条件を使用すると、for ループが停止して応答を待ちます。

#include <iostream>

int main()
{
     int x = 0;
     for(;;)
     {
         cout << x;
         if(getch()=='n')
                break;
     }  

}
4

2 に答える 2

1

発生したときにループから抜け出したい条件を見つけて、 breakキーワードを使用します。

#include <iostream>

int main()
{
     int x = 0;
     for(;;)
         cout << x;
         if(/* break condition*/){
             break;
         }
}

ユーザーからの特定のキーボード入力を検出することによってブレーク条件を実装することを妨げるものは何もありません。

編集:編集した質問から、ループを常に実行し続け、ユーザーの入力を待つのを止めないようにしたいようです。これを行う唯一の方法は、メイン スレッドのブレーク状態で検出される変数を変更するユーザー入力をリッスンする新しいスレッドを生成することです。

C++11 と新しいスレッド ライブラリにアクセスできる場合は、次のようなことができます。

#include <iostream>
#include <thread>

bool break_condition = false;

void looper(){
    for(;;){
        std::cout << "loop running" << std::endl;
        if(break_condition){
            break;
        }
    }
}

void user_input(){
    if(std::cin.get()=='n'){
        break_condition = true;
    }
}

int main(){
    //create a thread for the loop and one for listening for input
    std::thread loop_thread(looper);
    std::thread user_input_thread(user_input);

    //synchronize threads
    loop_thread.join();
    user_input_thread.join();

    std::cout << "loop successfully broken out of" << std::endl;
    return 0;
}

マルチスレッド コードにはシングル スレッド コードには存在しない問題があり、非常に厄介な場合があるため、スレッド化アプローチを採用することにした場合は注意してください。

于 2013-11-14T00:01:55.993 に答える
-1

あなたは継続を探していると思います

#include <iostream>

int main()
{
     int x = 0;
     for(;;)
     {
         cout << x;
         if(getch()=='n')
                continue;
     }  

}
于 2013-11-14T00:17:36.953 に答える