発生したときにループから抜け出したい条件を見つけて、 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;
}
マルチスレッド コードにはシングル スレッド コードには存在しない問題があり、非常に厄介な場合があるため、スレッド化アプローチを採用することにした場合は注意してください。