Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
d7d1cd
204 / 133 / 49
Регистрация: 30.06.2011
Сообщений: 1,250
Завершенные тесты: 1
#1

Прервать цикл из цикла, вложенного в него

02.09.2016, 09:53. Просмотров 869. Ответов 20
Метки нет (Все метки)

Приветствуют. Собственно, вопрос в названии темы.
C++
1
2
3
4
5
6
7
8
9
for(int i = 1; i <= 10; i++)
 for(int j = 1; j <= 5; j++)
{
 if(/* здесь условие выхода из обоих циклов */)
  {
   /* как выйти сразу из 2-х циклов? */
   /* break даст выход только из цикла j */
  }
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2016, 09:53
Ответы с готовыми решениями:

Оператор вложенного цикла
Может ли внешний оператор вложенного цикла не выполниться ни разу?

Выход из вложенного цикла
Собственно как выходить из вложенного цикла ? goto ?

Не выполняется условие вложенного цикла
Отладчик показывает что не выполняется условие цикла по j. В чем косяк? /*...

Объясните работу вложенного цикла
Привет всем,подскажите пожалуйста как работает данный цикл,я понимаю,что можно...

Составить и отладить программу с использованием вложенного цикла
На предприятии выработка продукции за одну неделю месяца составляла n единиц....

20
nimazzzy
Заблокирован
02.09.2016, 09:58 #2
- Заводить дополнительную булеву переменную, которую проверять в условии внешнего цикла, выставлять во внутреннеим.
- goto
0
d7d1cd
204 / 133 / 49
Регистрация: 30.06.2011
Сообщений: 1,250
Завершенные тесты: 1
02.09.2016, 10:02  [ТС] #3
nimazzzy, то есть, специального оператора в С++ для этого нет?
0
sourcerer
Модератор
Эксперт CЭксперт С++
4828 / 2020 / 314
Регистрация: 20.02.2013
Сообщений: 5,418
Записей в блоге: 24
Завершенные тесты: 1
02.09.2016, 10:08 #4
Лучший ответ Сообщение было отмечено Hikari как решение

Решение

Цитата Сообщение от d7d1cd Посмотреть сообщение
специального оператора в С++ для этого нет?
Есть. Оберните Ваши циклы в функцию или в лямбду и выходите с помощью return.
3
nimazzzy
Заблокирован
02.09.2016, 10:10 #5
Цитата Сообщение от d7d1cd Посмотреть сообщение
специального оператора в С++ для этого нет?
Специального оператора нет.
1
Hikari
Хитрая блондиночка $)
1451 / 963 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
02.09.2016, 10:10 #6
Цитата Сообщение от gru74ik Посмотреть сообщение
Ваши циклы в функцию или в лямбду
Вотъ вотъ-с.
И я того же мнения. Плюсую.
0
d7d1cd
204 / 133 / 49
Регистрация: 30.06.2011
Сообщений: 1,250
Завершенные тесты: 1
02.09.2016, 10:16  [ТС] #7
Цитата Сообщение от gru74ik Посмотреть сообщение
Оберните Ваши циклы в функцию или в лямбду и выходите с помощью return.
Это понятно. Спасибо за ответ.
Эммм... А что такое лямбда?
0
Hikari
Хитрая блондиночка $)
1451 / 963 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
02.09.2016, 10:19 #8
Цитата Сообщение от d7d1cd Посмотреть сообщение
что такое лямбда?
https://ru.wikipedia.org/wiki/Анонимная_функция
1
nimazzzy
Заблокирован
02.09.2016, 10:19 #9
http://en.cppreference.com/w/cpp/language/lambda
1
d7d1cd
204 / 133 / 49
Регистрация: 30.06.2011
Сообщений: 1,250
Завершенные тесты: 1
02.09.2016, 10:26  [ТС] #10
Hikari, nimazzzy, спасибо за ссылки. Дома почитаю (на работе интернет урезан, эти сайты не открываются).
Может кто-то перепишет мой пример с циклами и покажет как использовать эту анонимную функцию?
0
nimazzzy
Заблокирован
02.09.2016, 10:35 #11
C++
1
2
3
4
5
6
7
8
    auto f = []()
    {
        for (int i = 1; i <= 10; i++)
            for (int j = 1; j <= 5; j++)
                if (i > 2)
                    return;
    };
    f();
0
sourcerer
Модератор
Эксперт CЭксперт С++
4828 / 2020 / 314
Регистрация: 20.02.2013
Сообщений: 5,418
Записей в блоге: 24
Завершенные тесты: 1
02.09.2016, 10:48 #12
d7d1cd, учтите, чтобы использовать лямбды, компилятор должен поддерживать стандарт C++11. И очень часто бывает так, что поддержку стандарта C++11 надо галками в настройках IDE отдельно включать, либо прописывать в файлах настройки проекта специальные строчки, чтобы поддержка С++11 включилась.
0
d7d1cd
204 / 133 / 49
Регистрация: 30.06.2011
Сообщений: 1,250
Завершенные тесты: 1
02.09.2016, 10:50  [ТС] #13
Цитата Сообщение от gru74ik Посмотреть сообщение
d7d1cd, учтите, компилятор должен поддерживать стандарт C++11. И очень часто бывает так, что поддержку стандарта C++11 надо галками в настройках IDE отдельно включать, либо прописывать в файлах настройки проекта специальные строчки, чтобы поддержка С++11 включилась.
Видимо у меня не включен стандарт С++11, так как приведенный пример в C++Builder XE8 вызывает ошибку Expression syntax.
Как включить?
0
MansMI
1448 / 1157 / 549
Регистрация: 08.01.2012
Сообщений: 4,509
02.09.2016, 10:52 #14
как вариант
C++
1
2
3
4
5
6
7
8
9
10
for(int i = 1; i <= 10; i++)
{
   int j;
   for(j = 1; j <= 5; j++)
   {
      .....
      if(почему-то) break;
   }
   if(j<=5) break;
}
0
d7d1cd
204 / 133 / 49
Регистрация: 30.06.2011
Сообщений: 1,250
Завершенные тесты: 1
02.09.2016, 10:56  [ТС] #15
MansMI, это конечно вариант, спасибо. Именно на таких вариантах-костылях у меня сейчас и работает код. Но хочется познать всю мощь языка С++
0
sourcerer
Модератор
Эксперт CЭксперт С++
4828 / 2020 / 314
Регистрация: 20.02.2013
Сообщений: 5,418
Записей в блоге: 24
Завершенные тесты: 1
02.09.2016, 11:07 #16
Цитата Сообщение от d7d1cd Посмотреть сообщение
C++Builder XE8
Билдер весьма избирательно поддерживает плюсовые стандарты. По крайней мере, это точно так было с родным билдеровским компилятором. Последнее время, насколько мне известно, Embarcadero решили использовать какую-то свою модификацию компилятора clang 3.3, так что, возможно, в новых версиях Билдера что-то изменилось с поддержкой стандарта в лучшую сторону. В любом случае, по этому вопросу лучше создайте отдельную тему в соответствующем разделе (см. правила форума, п. 4.4).

Самый простой выход: установите QtCreator или MS Visual Studio 2015.
0
rikimaru2013
C++ Game Dev
2472 / 1141 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
02.09.2016, 11:09 #17
gru74ik, просто локальная функция в конкретной единицы трансляции не проще чем сменить IDE ?
0
nimazzzy
Заблокирован
02.09.2016, 11:10 #18
Проще и эффективнее - просто goto.
1
sourcerer
Модератор
Эксперт CЭксперт С++
4828 / 2020 / 314
Регистрация: 20.02.2013
Сообщений: 5,418
Записей в блоге: 24
Завершенные тесты: 1
02.09.2016, 11:22 #19
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
gru74ik, просто локальная функция в конкретной единицы трансляции не проще чем сменить IDE ?
Я бы сменил IDE, потому что:
Цитата Сообщение от d7d1cd Посмотреть сообщение
хочется познать всю мощь языка С++
Добавлено через 1 минуту
Цитата Сообщение от nimazzzy Посмотреть сообщение
Проще и эффективнее - просто goto.
Как вариант - да. Но большинство сразу же покроет вас позором и презрением, мало что ссаными тряпками бросаться не начнёт
0
Mr.X
Эксперт С++
3178 / 1705 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
02.09.2016, 11:59 #20
Цитата Сообщение от gru74ik Посмотреть сообщение
чтобы использовать лямбды, компилятор должен поддерживать стандарт C++11.
А если использовать auto для параметров, то нужен С++14.
1
02.09.2016, 11:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2016, 11:59

Как корректно прервать цикл?
Вот цикл.Я спрашиваю &quot;Добавить еще?&quot;,пользователь жмет y или n и у меня сразу...

Вывести ряд простых чисел с использованием вложенного цикла
Помогите написать программу вывода ряда простых чисел с использованием двойного...

Как прервать цикл используя условия ?
Есть цикл for(double i=1;i&lt;=?;i++) { s+=pow(((2*i)+1),4.0); }Мне...


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

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

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