Выход из бесконечного цикла

0

Есть ли способ вырваться из бесконечного цикла, когда он работает без использования Ctrl + C? Я хотел бы реализовать такой метод в других программах. Как в этом примере программа:

#include <iostream>

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

есть способ сохранить цикл for, но сломать его с помощью некоторого ключа в любое время. Я также должен объяснить, что я понимаю, используя break ;, но я хочу, чтобы цикл продолжал идти. Если я использую условие break, подобное этому, цикл for остановится и дождитесь ответа.

#include <iostream>

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

}
  • 2
    нарушать условия.
  • 1
    Использовать break ...?
Показать ещё 2 комментария
Теги:
infinite-loop

2 ответа

1

Найдите какое-то условие, которое вы хотите вырваться из цикла при обнаружении, затем используйте ключевое слово break:

#include <iostream>

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

Там ничего не мешает вам реализовать условие прерывания, обнаружив конкретный ввод с клавиатуры пользователя.

EDIT: Из вашего отредактированного вопроса кажется, что вы хотите, чтобы цикл продолжал работать все время и не останавливался, ожидая ввода пользователя. Единственный способ, которым я могу это сделать, - создать новый поток, который прослушивает ввод пользователя, который изменяет переменную, которая обнаруживается в состоянии прерывания вашего основного потока.

Если у вас есть доступ к С++ 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;
}

Если вы решите использовать подход с потоками, будьте осторожны, так как в многопоточном коде есть проблемы, которые не существуют в однопоточном коде, и иногда они могут быть действительно неприятными.

  • 0
    Я понимаю этот метод, но он останавливает цикл for, ожидая ответа. Я бы хотел, чтобы цикл for продолжался, пока условие останова находится вне его.
  • 1
    Что именно вы имеете в виду, когда говорите: «Я бы хотел, чтобы цикл for продолжался, пока условие останова находится вне его»?
Показать ещё 5 комментариев
0

Вы ищете продолжение, я думаю

#include <iostream>

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

}
  • 0
    Читайте продолжение заявления .
  • 0
    хорошо, тогда вы должны прочитать вопрос. «Я должен также объяснить, что я понимаю, используя break; но я хочу, чтобы цикл продолжался»
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню