Есть ли способ вырваться из бесконечного цикла, когда он работает без использования 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;
}
}
Найдите какое-то условие, которое вы хотите вырваться из цикла при обнаружении, затем используйте ключевое слово 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;
}
Если вы решите использовать подход с потоками, будьте осторожны, так как в многопоточном коде есть проблемы, которые не существуют в однопоточном коде, и иногда они могут быть действительно неприятными.
Вы ищете продолжение, я думаю
#include <iostream>
int main()
{
int x = 0;
for(;;)
{
cout << x;
if(getch()=='n')
continue;
}
}
break
...?