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

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

15.07.2009, 21:31. Просмотров 6545. Ответов 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 просто не проверяется. Может, для таких ситуаций есть какое-то другое стандартное решение?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2009, 21:31
Я подобрал для вас темы с готовыми решениями и ответами на вопрос комманда break в двойном цикле (C++):

Почему в цикле не срабатывает break
Привет всем! Объясните почему в этом цикле при i=2 не срабатывает break? #include &lt;iostream&gt; using namespace std; int main() ...

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

Использование break
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){...

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

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

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

28
Alik-Soldier
9 / 9 / 2
Регистрация: 01.05.2009
Сообщений: 127
15.07.2009, 21:36 #2
Введи например какой-нибудь флажок,например так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool flag=false;
for(int i=0; i<imageLabel.GetSize1(); ++i)
        {
             for(int j=0; j<imageLabel.GetSize2(); ++j)
            {
              if(imageLabel(i,j)!=0)
              {
                  flag=true;
                  labelCell.push_back(imageLabel(i,j));
                  break;
              }
           }
if(flag==true)
break;
       }
0
Delphin_KKC
UNIX-way
710 / 494 / 49
Регистрация: 15.01.2009
Сообщений: 1,721
15.07.2009, 21:38 #3
Путь "в лоб". Возможно есть и элегантнее.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int flag=0;
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));
                  flag=1;
                  break;
              }
           }
           if (flag == 1) break;
       }
0
HIMen
4249 / 1416 / 101
Регистрация: 12.04.2009
Сообщений: 2,346
15.07.2009, 21:43 #4
Используй goto

C++
1
2
3
4
5
.....
goto metka;
.....
metka:
.....
0
Phantom
Эксперт С++
3168 / 850 / 39
Регистрация: 29.12.2008
Сообщений: 952
15.07.2009, 21:44 #5
Используй оператор goto. Это один из классических случаев, когда его использование элегантно решает проблему.
0
Delphin_KKC
UNIX-way
710 / 494 / 49
Регистрация: 15.01.2009
Сообщений: 1,721
15.07.2009, 21:46 #6
Способ, предложенный HIMen, более быстрый и существенно экономит ассемблерные операции (особенно когда много итераций цикла), но многие преподаватели за goto убить готовы Потому если для препода прога - то лучше флажки.
0
Rififi
2363 / 1056 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
15.07.2009, 22:04 #7
Etudiante,
C++
1
2
3
4
5
6
7
8
9
10
try
{
    for...
    for...
       if (...)
           throw std::exception();
}
catch(std::exception&)
{
}
но лучше goto

многие преподаватели за goto убить готовы
объясни преподу что он ламер, и не понимает, когда целесообразно использовать goto, а когда - нет. :gigi:
0
Delphin_KKC
UNIX-way
710 / 494 / 49
Регистрация: 15.01.2009
Сообщений: 1,721
15.07.2009, 22:08 #8
Цитата Сообщение от Rififi Посмотреть сообщение
объясни преподу что он ламер, и не понимает, когда целесообразно использовать goto, а когда - нет. :gigi:
Не все преподы могут адекватно это воспринять. По своему опыту. У нас был препод (по Паскалю) который утверждал что тип byte может принимать значения от -128 до +127. За программку
Pascal
1
2
3
4
var i:byte;
begin
i:=-1;
end.
мне оценку на 1 балл снизили (после того, как препод увидел мат компилятора на третью строку).
Хорошо хоть -5 не додумался присваивать переменной, а то б на пересдачу потом
З.Ы.Препод по Делфи оказался более адекватным, а по С++ был вообще - "свой человек".
0
Evg
Эксперт CАвтор FAQ
18937 / 6898 / 512
Регистрация: 30.03.2009
Сообщений: 19,432
Записей в блоге: 30
15.07.2009, 22:14 #9
Жирный +1 к тому, чтобы использовать goto
0
Phantom
15.07.2009, 22:19
  #10

Не по теме:

Жирный +1 к тому, чтобы объяснить такому преподу что он ламер

0
Evg
15.07.2009, 22:21
  #11

Не по теме:

Цитата Сообщение от Phantom Посмотреть сообщение
Жирный +1 к тому, чтобы объяснить такому преподу что он ламер
Как показывает практика, если препод ламер, то ему этого не объяснить

0
Phantom
15.07.2009, 22:27
  #12

Не по теме:

Evg, тоже верно

0
M128K145
Эксперт JavaЭксперт С++
8320 / 3540 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
15.07.2009, 22:28 #13
Ну да, меня тоже учили не использовать goto, но если у человека с адекватным мышлением забрать его, то это все равно, что писать на асме без джампов(может немного преувеличено и грубо, но близко к правде)
0
Etudiante
0 / 0 / 1
Регистрация: 12.04.2009
Сообщений: 47
16.07.2009, 00:01  [ТС] #14
Значит, таки goto?
спасибо...
0
Search..
Заказ софта
340 / 185 / 21
Регистрация: 26.05.2009
Сообщений: 863
16.07.2009, 00:28 #15
Как говорил мой препод: "Если ты на 101% уверен, что goto только облегчает обстановку, при этом не делая код запутанным, его можно использовать.". Как-то так он говорил, по-моему. Эх...))
1
M128K145
Эксперт JavaЭксперт С++
8320 / 3540 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
16.07.2009, 00:40 #16
я б запретил бы только одной категории людей использовать goto - извращенцам
0
Alex M
4 / 4 / 1
Регистрация: 12.07.2009
Сообщений: 18
16.07.2009, 04:19 #17
Пользуясь случаем хотел бы узнать для чего создан оператор?

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

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

Очень прошу участников не устраивать холивар про гоуту, у нас уже как то был один ))
1
mamedovvms
2918 / 839 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
16.07.2009, 08:03 #20
извините я только второй день изучаю с++, но у меня вот какой вопрос а нельзя ли было использовать просто цикл while
0
16.07.2009, 08:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2009, 08:03
Привет! Вот еще темы с решениями:

Жалуется на break
#include &lt;iostream&gt; using namespace std; int main() { cout &lt;&lt; &quot;Difficulty Levels\n\n&quot;; cout &lt;&lt; &quot;1 - Easy\n&quot;; cout &lt;&lt; &quot;2 -...

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

Заменить break
здравствуйте. помогите разобраться. нужно заменить break в теле цикла(точнее от него избавиться), но чтобы алгоритм программы остался таким...

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


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

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

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