Как выйти из вложенных операторов if-else внутри цикла for? (C / C ++)

у меня есть for цикл в моей программе, который является основным циклом моей программы, и он должен работать в режиме реального времени. Есть некоторые if-else операторы внутри цикла тоже. Я хочу, если таковые имеются if условия выполнены, программа выходит из if-else заявления и повторите цикл for.

for(;;)
{
if(condition_one)
{
do_one();
}
else if(condition_two)
{
do_two();
}
else
{
do_three();
}

rest_of_program();
}

Я попытался написать приведенный выше код так:

for(;;)
{
if(condition_one)
{
do_one();
goto exitt;
}
else if(condition_two)
{
do_two();
goto exitt;
}
else
{
do_three();
}
exitt:
rest_of_program();
}

Но, похоже, проблема в том, что моя программа не работает! Я сделал что-то неправильно? Или есть идея получше?

0

Решение

Я думаю, вы слишком усложняете дело. Дело в том, что этот код:

for(;;)
{
if(condition_one)
{
do_one();
goto exitt;
}
else if(condition_two)
{
do_two();
goto exitt;
}
else
{
do_three();
}
exitt:
rest_of_program();
}

эквивалентно этому:

for(;;)
{
if(condition_one)
{
do_one();
}
else if(condition_two)
{
do_two();
}
else
{
do_three();
}
rest_of_program();
}

Отдельные блоки if-else являются взаимоисключающими и независимо от того, какой из них выполняется, после этого будет rest_of_program и после этого цикл продолжается.

2

Другие решения

Использовать break заявление. Это выйдет из for цикл:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/break

1

Так как это не было упомянуто, есть также возможность использования continue оператор для сброса в начало цикла без немедленно выход. Обратите внимание, что это будут выполнить оператор итератора в for петля.

1

Не могли бы вы попробовать новый оператор IF и поместить его в верхнюю часть цикла for?

for(;;)
{
if(condition_one && condition_two){
continue
}
else if(condition_one)
{do_one();}
else if(condition_two)
{do_two();}
else {do_three();}

rest_of_program();
}

Я думаю, что это в основном то, что вы просите. Вы проверяете, удовлетворены ли оба условия, а затем возвращаетесь в свой цикл, в противном случае вы продолжаете проверять свой список.

Кстати, МНОГО ЛУЧШИХ СПОСОБОВ делать это, чем использовать GoTo, но я не видел ваш полный код, поэтому трудно найти решение, которое будет работать.

РЕДАКТИРОВАТЬ: Как указано пользователем463035818 ниже, continue будет работать вместо goto. Сначала я немного запутался, но он прав, пропустит текущую итерацию.

1
По вопросам рекламы [email protected]