Реально ли сделать выход из цикла без команды ввода? Допустим идет бесконечный цикл и в любой момент я нажимаю 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 Предыдущий оратор правильно заметил, что в вашем примере цикл не бесконечен.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Ребят, не подскажете, как сделать вывод из цикла итогового значения i,k,j? Пробовал через присваивания другим переменным, но они остаются локальными...
Есть массив элементов типа int, например {-50, 2, 55, 985, 98515, -5354}