Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 40, средняя оценка - 4.65
Etudiante
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 47
#1

комманда break в двойном цикле - C++

15.07.2009, 21:31. Просмотров 5632. Ответов 28
Метки нет (Все метки)

как сделать так, чтобы при выполнении условия происходил выход из двойного цикла?
Я пробую

C++
1
2
3
4
5
6
7
8
9
10
11
for(int i=0; i<imageLabel.GetSize1(); ++i)
    {
         for(int j=0; j<imageLabel.GetSize2(); ++j)
            {
              if(imageLabel(i,j)!=0)
          {
          labelCell.push_back(imageLabel(i,j));
          break;
          }
           }
       }
Мне нужно, чтобы цикл заканчивался, как только я попадаю на первое ненулевое значение imageLabel, но break относится только и if. Если поставить break перед каждой закрывающей скобкой, то if просто не проверяется. Может, для таких ситуаций есть какое-то другое стандартное решение?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2009, 21:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос комманда break в двойном цикле (C++):

While{switch{switch{break;}}} break выходит из while - C++
В общем необходимо конструкцию switch запускать в цикле, в каждом case X: стоит свой break;, да бы выполнился один case, а не все. Проблема...

Цикл do.while и break - C++
Задача: написать программу, которая принимает от пользователя 10 int чисел, затем выводит их в строку, находит среднее значение. Так же...

Break и return - C++
Дано два кода на Си. #include&lt;stdio.h&gt; int func(char ,char); void main() { char sym,str; int z; printf(&quot;Vvedite stroky:\n&quot;); ...

Инструкция break - C++
Эм, балуюсь с C++. Значит, отбираю простые числа, первый вариант программы: #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include...

оператор break - C++
Здравствуйте! Я где-то слышал, что использовать оператор break для выхода из цикла - не хорошо. И что его можно использовать только если...

Использование break - C++
using namespace std; void print_out(int n); int main(){ int n; cout&lt;&lt;&quot;введите число n:\n&quot;; cin&gt;&gt;n; if(n==0){...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
M128K145
Эксперт С++
8286 / 3505 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
16.07.2009, 00:40 #16
я б запретил бы только одной категории людей использовать goto - извращенцам
Alex M
4 / 4 / 1
Регистрация: 12.07.2009
Сообщений: 18
16.07.2009, 04:19 #17
Пользуясь случаем хотел бы узнать для чего создан оператор?

C++
1
goto
Всмысли каким образом его можно использовать в наших программах?
Yurii_74
paladin
279 / 179 / 3
Регистрация: 25.02.2009
Сообщений: 592
16.07.2009, 07:41 #18
Цитата Сообщение от Alex M Посмотреть сообщение
Пользуясь случаем хотел бы узнать для чего создан оператор?

C++
1
goto
Безусловный переход к метке. Нецелесообразное массовое использование сильно усложняет понимание всего кода.
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
16.07.2009, 08:00 #19
Альтернатива goto в этом случае - присвоить переменной i значение imageLabel.GetSize1(); и после этого сделать break. Тогда произойдет выход из двух циклов,что позволит обойтись без goto,если припекло.

Очень прошу участников не устраивать холивар про гоуту, у нас уже как то был один ))
mamedovvms
2916 / 837 / 93
Регистрация: 30.04.2009
Сообщений: 2,627
16.07.2009, 08:03 #20
извините я только второй день изучаю с++, но у меня вот какой вопрос а нельзя ли было использовать просто цикл while
Alex M
4 / 4 / 1
Регистрация: 12.07.2009
Сообщений: 18
16.07.2009, 08:07 #21
Цитата Сообщение от Yurii_74 Посмотреть сообщение
Безусловный переход к метке. Нецелесообразное массовое использование сильно усложняет понимание всего кода.
Ну это понятно, а как его можно использовать в программе? Для создания кнопок?
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
16.07.2009, 08:12 #22
mamedovvms, Это будет совсем по-паскалевски - вводить новую булевую переменную, которая будет говорить "Я еще не закончил" в условии проверки. В случае прохода по каждой точке изображения вложенные циклы for вполне оправданы,в то время как на цикл while нужно будет смотреть пристальнее,чтобы понять как именно он себя ведет.

Добавлено через 2 минуты 24 секунды
Цитата Сообщение от Yurii_74 Посмотреть сообщение
Безусловный переход к метке. Нецелесообразное массовое использование сильно усложняет понимание всего кода.
Вот тут еще добавлю,что гоуту облегчает генерацию кода на си. К примеру, если посмотреть на код, сгенерированный бизоном на языках lexx+yacc(синтаксический анализ), там можно увидеть операторы goto. Действительно,читаемость такому коду не нужна,поскольку текст из которого он генерируется понятнее в любом случае.
mamedovvms
2916 / 837 / 93
Регистрация: 30.04.2009
Сообщений: 2,627
16.07.2009, 08:15 #23
XuTPbIu_MuHTAu, ну хорошо я ничего против не говорю я просто спросил))))))))))
Yurii_74
paladin
279 / 179 / 3
Регистрация: 25.02.2009
Сообщений: 592
16.07.2009, 09:21 #24
while в проходе по массивам различных размерностей все же выглядит гораздо прятней:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
i = 0;
j = 0;
dx = imageLabel.GetSize1();
dy = imageLabel.GetSize2();
while (i < dx)
{
   if(imageLabel(i,j)!=0)
   {
     labelCell.push_back(imageLabel(i,j));
     break;
   }
   j++;
   if ( j >= dy)
   {
     j = 0;
     i++;
   }
}
Для 7мимерного массива каскад из for'ов выглядит не очень хорошо, IMHO.
Evg
Эксперт CАвтор FAQ
17633 / 5857 / 378
Регистрация: 30.03.2009
Сообщений: 16,156
Записей в блоге: 26
16.07.2009, 09:40 #25
Цитата Сообщение от Yurii_74 Посмотреть сообщение
while в проходе по массивам различных размерностей все же выглядит гораздо прятней:
Для 7мимерного массива каскад из for'ов выглядит не очень хорошо, IMHO.
В оригинальном коде из двух циклов достаточно беглого взгляда, чтобы понять, что там делается. А твой цикл надо долго изучать, и пока на пальцах не переберёшь несколько комбинаций - что-либо понять сложно
Yurii_74
paladin
279 / 179 / 3
Регистрация: 25.02.2009
Сообщений: 592
16.07.2009, 09:54 #26
Цитата Сообщение от Evg Посмотреть сообщение
В оригинальном коде из двух циклов достаточно беглого взгляда, чтобы понять, что там делается. А твой цикл надо долго изучать, и пока на пальцах не переберёшь несколько комбинаций - что-либо понять сложно
Для этого придуманы комментарии:
C
1
2
/*пробег по всем элементам массива (слева направо сверху вниз) до тех пор,
пока не наткнемся на ненулевой*/
Увеличение индексов вообще можно затолкать в цикл (если бы размерность была больше), и для любой размерности кол-во строк кода не увеличивалось бы.
mamedovvms
2916 / 837 / 93
Регистрация: 30.04.2009
Сообщений: 2,627
16.07.2009, 09:57 #27
да ладно не спорьте, кому как удобнее и кто как привык, все равно почти всегда каждый остается при своем мнении
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.07.2009, 10:28 #28
C++
1
2
3
4
5
6
7
    for (int i = 0, cont = 1; cont &&  i < imageLabel.GetSize1(); i++)
        for (int j = 0; j < imageLabel.GetSize2(); j++)
            if (imageLabel(i, j)) {
                  labelCell.push_back(imageLabel(i, j));
                  cont = 0;
                  break;
            }
флаг локальный там
Etudiante
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 47
16.07.2009, 13:15  [ТС] #29
Цитата Сообщение от Yurii_74 Посмотреть сообщение
while в проходе по массивам различных размерностей все же выглядит гораздо прятней:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
i = 0;
j = 0;
dx = imageLabel.GetSize1();
dy = imageLabel.GetSize2();
while (i < dx)
{
   if(imageLabel(i,j)!=0)
   {
     labelCell.push_back(imageLabel(i,j));
     break;
   }
   j++;
   if ( j >= dy)
   {
     j = 0;
     i++;
   }
}
Для 7мимерного массива каскад из for'ов выглядит не очень хорошо, IMHO.
Ух ты, спасибо
Мне было очень интересно, можно ли это сделать с помощью while. Самостоятельно не получилось, но ведь рано или поздно получится
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2009, 13:15
Привет! Вот еще темы с ответами:

Break в циклах - C++
Такая проблема: занимаюсь по книге Эллайна, и в ней заговорилось о break и его использовании в циклах. Я, дабы проверить эту зверюгу на...

Оператор break - C++
Подскажите, пожалуйста почему оператор break в строке 44 выдаёт ошибку, и как её исправить? #include&lt;iostream.h&gt; #include&lt;conio.h&gt; ...

Как подсчитать Длину строки в двойном массиве char - C++
Как подсчитать Длину строки в двойном массиве char char c; int a; for(int j=0;j&lt;10;j++) for(int i=0;i&lt;10;i++) cin &gt;&gt;...

Ошибка доступа на break - C++
Здравствуйте! Пишу программу, по сути являющуюся мини базой данных, в которой должна быть возможность сохранить и загрузить базу. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.07.2009, 13:15
Ответ Создать тему
Опции темы

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