Реально ли сделать выход из цикла без команды ввода? Допустим идет бесконечный цикл и в любой момент я нажимаю ENTER и цикл прекращается. Если и да, то каким образом?
for (int repeat = 0; repeat <= 1; repeat--) {
system("color 07");
Beep(2233, 500);
system("color 70");
Sleep(400);
}
Приведённый Вами цикл не является бесконечным. Когда repeat
достигнет минимального значения, при очередной попытке уменьшить его произойдёт underflow, что, кстати, вызовет неопределённое поведение программы.
for (int repeat = 0; repeat <= 1; repeat--)
Вот пример, работающий на Linux:
#include <atomic>
#include <iostream>
#include <thread>
int main()
{
std::atomic<bool> run = true;
std::thread stopper([&](){ std::cin.ignore(); run = false; });
while (run)
{
// Ваш код
}
stopper.join();
}
Мы запускаем отдельный поток, в котором вызываем чтение стандартного ввода. Эта операция блокирует поток. При нажатии на ENTER, поток просыпается, игнорирует ввод и устанавливает переменную run
в значение false
.
При этом основной поток обнаружит, что run == false
и прекратит выполнение цикла while
. После этого мы дожидаемся правильного завершения запущенного ранее потока, и программа завершается.
Если у вас установленна библиотека conio (нет в std), вполне подойдет старый добрый kbhit()
:
#include <conio.h>
#include <iostream>
using namespace std;
int main()
{
while(1)
{
system("color 07");
Beep(2233, 500);
system("color 70");
Sleep(400);
if(kbhit())
{
break;
}
}
return 0;
}
Если такой библиотеки нет, то можно без труда найти кастомный вариант такой же, по смыслу, функции в интернетах.
PS Предыдущий оратор правильно заметил, что в вашем примере цикл не бесконечен.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Ребят, не подскажете, как сделать вывод из цикла итогового значения i,k,j? Пробовал через присваивания другим переменным, но они остаются локальными...
Есть массив элементов типа int, например {-50, 2, 55, 985, 98515, -5354}