Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
dimitrykorno
0 / 0 / 1
Регистрация: 16.04.2016
Сообщений: 50
1

Как реализовать переход на следующую итерацию внешнего цикла из вложенного?

21.09.2016, 18:08. Просмотров 5354. Ответов 13

Добрый вечер. Возможен ли в C++ переход на следующую итерацию внешнего цикла из вложенного?

например:
C++
1
2
3
4
5
6
for(int i=0;i<n;i++)
   {
     for(int j=0;j<m;j++)
          if(...) continue;
     func();
    }
Тут continue переведет внутренний цикл на следующую итерацию, а как сделать, чтобы перевести сразу на внешний?
(Суть в том, что во внутреннем цикле заложена проверка с проходом по массиву, если она будет верной, то нужно сразу перейти на следующую итерацию i, без выполнения func() )

Можно ли избежать некрасивых конструкций вроде:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
p=0;
for(int i=0;i<n;i++)
   {
     for(int j=0;j<m;j++)
         if(...) p=1;
     
     if(p==1)
         {
          p=0;
          continue;
         }
     func();
   }
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2016, 18:08
Ответы с готовыми решениями:

Как реализовать переход на следующую итерацию внешнего цикла из вложенного?
Есть ли способ завершить или продолжить внешний цикл из вложенного? Пример : for (i = 0; i &lt; 10;...

Не осуществляется переход на следующую итерацию цикла
Здравствуйте! Сделал простейший калькулятор на C#, чтобы вспомнить основы языка. В конце, вместо...

Выход из цикла и переход на следующую итерацию
как в в 1С сделать выход из цикла или перейти на следующую итерацию в цикле??... в С++ это...

Цикл do.while не идет на следующую итерацию
Товарищи форумчане. Появилась проблема. Делая задание по одному предмету, наткнулся на проблему с...

Как правильно вывести каждую итерацию цикла сортировки выбором
#include&lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;cstdlib&gt; #include&lt;ctime&gt; using namespace std;...

13
nmcf
6538 / 5761 / 2623
Регистрация: 14.04.2014
Сообщений: 24,498
21.09.2016, 18:13 2
С помощью goto можно. В конец внешнего цикла.
0
dimitrykorno
0 / 0 / 1
Регистрация: 16.04.2016
Сообщений: 50
21.09.2016, 18:17  [ТС] 3
нам запрещают использовать goto
0
nmcf
6538 / 5761 / 2623
Регистрация: 14.04.2014
Сообщений: 24,498
21.09.2016, 18:18 4
Кто запрещает?
Ну тогда делай как во втором примере.
0
21.09.2016, 18:18
hoggy
Эксперт С++
7642 / 3446 / 716
Регистрация: 15.11.2014
Сообщений: 7,865
Завершенные тесты: 1
21.09.2016, 20:33 5
Цитата Сообщение от dimitrykorno Посмотреть сообщение
Тут continue переведет внутренний цикл на следующую итерацию, а как сделать, чтобы перевести сразу на внешний?
C++
1
2
3
4
5
for(int i=0;i<n;++i)
  if(trololo())
     continue;
  else
    func();
1
dimitrykorno
0 / 0 / 1
Регистрация: 16.04.2016
Сообщений: 50
21.09.2016, 20:35  [ТС] 6
проверка if должна быть еще в одном цикле. я ведь не могу его засунуть в условие.
0
rikimaru2013
2517 / 1179 / 355
Регистрация: 30.11.2013
Сообщений: 3,792
21.09.2016, 20:38 7
Цитата Сообщение от nmcf Посмотреть сообщение
С помощью goto можно.
А как часто вы им пользуетесь?
0
dailydose
664 / 210 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
Завершенные тесты: 1
21.09.2016, 20:41 8
Цитата Сообщение от dimitrykorno Посмотреть сообщение
C++
1
2
3
4
5
6
for(int i=0;i<n;i++)
{
    for(int j=0;j<m;j++)
        if(...) continue;
    func();
}
C++
1
2
3
4
5
6
for(int i=0;i<n;i++)
{
    for(int j=0;j<m;j++)
        if(...) break;
    func();
}
?
0
Max Dark
шКодер самоучка
2053 / 1806 / 884
Регистрация: 09.10.2013
Сообщений: 3,947
Записей в блоге: 7
Завершенные тесты: 2
21.09.2016, 20:42 9
dimitrykorno, как вариант - вынести внутренний цикл в отдельную функцию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool internal(....) {
    for(...) {
        if (...)
            return true;
    }
    return false;
}
 
void external(....) {
    for(...) {
        if(internal(...))
            continue;
    }
}
1
dailydose
664 / 210 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
Завершенные тесты: 1
21.09.2016, 20:43 10
Цитата Сообщение от dimitrykorno Посмотреть сообщение
я ведь не могу его засунуть в условие.
плохо пробуешь )
0
dimitrykorno
0 / 0 / 1
Регистрация: 16.04.2016
Сообщений: 50
21.09.2016, 20:43  [ТС] 11
break выведет меня из внутреннего цикла, и тогда будет выполнятся func().
0
dailydose
664 / 210 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
Завершенные тесты: 1
21.09.2016, 20:44 12
Цитата Сообщение от Max Dark Посмотреть сообщение
вынести внутренний цикл в отдельную функцию
об этом hoggy и сказал выше

Добавлено через 40 секунд
Цитата Сообщение от dimitrykorno Посмотреть сообщение
break выведет меня из внутреннего цикла, и тогда будет выполнятся func().
C++
1
bool flag;
0
nmcf
21.09.2016, 20:49
  #13

Не по теме:

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
А как часто вы им пользуетесь?
Я - очень редко. Но если он хочет такой переход...

0
ValeryS
Модератор
7965 / 5934 / 785
Регистрация: 14.02.2011
Сообщений: 20,415
Завершенные тесты: 1
21.09.2016, 22:58 14
Лучший ответ Сообщение было отмечено dimitrykorno как решение

Решение

Цитата Сообщение от dimitrykorno Посмотреть сообщение
C++
1
2
3
4
5
6
for(int i=0;i<n;i++)
{
  for(int j=0;j<m;j++)
     if(...) continue;
   func();
 }

как вариант
C++
1
2
3
4
5
6
7
8
for(int i=0;i<n;i++)
{
  int j;
  for( j=0;j<m;j++)
       if(...) break;
  if(j==m)
        func();
}
но по правильному надо идеологию пересмотреть
1
21.09.2016, 22:58
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2016, 22:58

Почему для перехода на следующую итерацию надо нажимать enter?
Почему в консоли переход на новую итерацию цикла надо жать интер? Как сделать, чтобы после запуска...

Как обойтись без вложенного цикла?
Нужно в данном конкретном случае перебрать, например, все возможные комбинации символов цепочки из...

Как сделать LIMIT для вложенного цикла SELECT
Приветствую! У меня есть вот такой запрос: SELECT wp_rg_lead.date_created, wp_rg_lead_detail.*...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.