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

103
18 декабря 2021, 04:40

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

for (int repeat = 0; repeat <= 1; repeat--) {
                system("color 07");
                Beep(2233, 500);
                system("color 70");
                Sleep(400);
            }
Answer 1

Приведённый Вами цикл не является бесконечным. Когда 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. После этого мы дожидаемся правильного завершения запущенного ранее потока, и программа завершается.

Answer 2

Если у вас установленна библиотека 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 Предыдущий оратор правильно заметил, что в вашем примере цикл не бесконечен.

READ ALSO
Как вывести значения цикла после окончания

Как вывести значения цикла после окончания

Ребят, не подскажете, как сделать вывод из цикла итогового значения i,k,j? Пробовал через присваивания другим переменным, но они остаются локальными...

185
Сортировка динамической структуры

Сортировка динамической структуры

У меня есть структура данных

173
Как найти элементы с заданным условием C# LINQ

Как найти элементы с заданным условием C# LINQ

Есть массив элементов типа int, например {-50, 2, 55, 985, 98515, -5354}

191
WPW Prism &amp; DryIoC constructor injection, есть ли?

WPW Prism & DryIoC constructor injection, есть ли?

Доброго времени сутокСтолкнулся с проблемой

78