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

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

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

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

15.07.2009, 21:31. Просмотров 5440. Ответов 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
оператор break C++
Break и return C++
C++ Цикл do.while и break
Использование break C++
C++ Break в циклах
C++ Оператор break
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alik-Soldier
9 / 9 / 0
Регистрация: 01.05.2009
Сообщений: 127
15.07.2009, 21:36     комманда break в двойном цикле #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;
       }
Delphin_KKC
UNIX-way
709 / 494 / 17
Регистрация: 15.01.2009
Сообщений: 1,721
15.07.2009, 21:38     комманда break в двойном цикле #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;
       }
HIMen
4126 / 1375 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
15.07.2009, 21:43     комманда break в двойном цикле #4
Используй goto

C++
1
2
3
4
5
.....
goto metka;
.....
metka:
.....
Phantom
Эксперт C++
3162 / 844 / 16
Регистрация: 29.12.2008
Сообщений: 952
15.07.2009, 21:44     комманда break в двойном цикле #5
Используй оператор goto. Это один из классических случаев, когда его использование элегантно решает проблему.
Delphin_KKC
UNIX-way
709 / 494 / 17
Регистрация: 15.01.2009
Сообщений: 1,721
15.07.2009, 21:46     комманда break в двойном цикле #6
Способ, предложенный HIMen, более быстрый и существенно экономит ассемблерные операции (особенно когда много итераций цикла), но многие преподаватели за goto убить готовы Потому если для препода прога - то лучше флажки.
Rififi
2338 / 1053 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
15.07.2009, 22:04     комманда break в двойном цикле #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:
Delphin_KKC
UNIX-way
709 / 494 / 17
Регистрация: 15.01.2009
Сообщений: 1,721
15.07.2009, 22:08     комманда break в двойном цикле #8
Цитата Сообщение от Rififi Посмотреть сообщение
объясни преподу что он ламер, и не понимает, когда целесообразно использовать goto, а когда - нет. :gigi:
Не все преподы могут адекватно это воспринять. По своему опыту. У нас был препод (по Паскалю) который утверждал что тип byte может принимать значения от -128 до +127. За программку
Pascal
1
2
3
4
var i:byte;
begin
i:=-1;
end.
мне оценку на 1 балл снизили (после того, как препод увидел мат компилятора на третью строку).
Хорошо хоть -5 не додумался присваивать переменной, а то б на пересдачу потом
З.Ы.Препод по Делфи оказался более адекватным, а по С++ был вообще - "свой человек".
Evg
Эксперт CАвтор FAQ
17471 / 5709 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
15.07.2009, 22:14     комманда break в двойном цикле #9
Жирный +1 к тому, чтобы использовать goto
Phantom
15.07.2009, 22:19
  #10

Не по теме:

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

Evg
15.07.2009, 22:21
  #11

Не по теме:

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

Phantom
15.07.2009, 22:27
  #12

Не по теме:

Evg, тоже верно

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

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

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

Очень прошу участников не устраивать холивар про гоуту, у нас уже как то был один ))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2009, 08:03     комманда break в двойном цикле
Еще ссылки по теме:
C++ Инструкция break
Как подсчитать Длину строки в двойном массиве char C++
Ключевое слово break C++
C++ Цикл for и оператор break
C++ Ошибка доступа на break

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

Или воспользуйтесь поиском по форуму:
mamedovvms
2916 / 837 / 93
Регистрация: 30.04.2009
Сообщений: 2,624
16.07.2009, 08:03     комманда break в двойном цикле #20
извините я только второй день изучаю с++, но у меня вот какой вопрос а нельзя ли было использовать просто цикл while
Yandex
Объявления
16.07.2009, 08:03     комманда break в двойном цикле
Ответ Создать тему
Опции темы

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