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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.72
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
#1

Выход из двух циклов сразу (без goto) - C++

27.04.2010, 00:12. Просмотров 3935. Ответов 19
Метки нет (Все метки)

Здрасти, как можно выйти из нескольких циклов сразу? без goto.

C++
1
2
3
4
5
 for (int i=0; i<ROWS; i++)
    for (int j=0; j<COLS; j++){
        if (mas[i][j]==0) //то выход из обоих циклов
        std::cout<<mas[i][j];
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2010, 00:12     Выход из двух циклов сразу (без goto)
Посмотрите здесь:
Повторно запустить оператор switch без goto, циклов и доп. функций C++
C++ Критично ли использование goto при выходе из циклов?
сумма элементов массива без циклов C++
Одновременная работу двух циклов openMP C++
Перевернуть число без помощи массивов циклов C++
Заполнение двумерного массива без вложенных циклов C++
Нужно переделать из двух циклов for в один цикл for C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mulat
7 / 7 / 0
Регистрация: 09.01.2009
Сообщений: 41
27.04.2010, 00:23     Выход из двух циклов сразу (без goto) #2
return?
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
27.04.2010, 00:25  [ТС]     Выход из двух циклов сразу (без goto) #3
Цитата Сообщение от Mulat Посмотреть сообщение
return?
return требует число, а если поставлю число (return 1) то конец программе
krolex
9 / 9 / 1
Регистрация: 27.01.2010
Сообщений: 63
27.04.2010, 00:27     Выход из двух циклов сразу (без goto) #4
Оператор досрочного завершения break

break;

Пример Ex1_04. Суммирование до 10 чисел вводимой последовательности. При вводе отрицательного числа работа программы завершается.

C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
void main()
{ int s=0, i, k;
  puts("Input up to 10 numbers.");
  for (i=1; i<11; i++)
   { 
     scanf("%d",&k);
     if (k<0) break;  
     s+=k;
   }
  printf("Result = %d.\n",s);
Миниатюры
Выход из двух циклов сразу (без goto)  
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
27.04.2010, 00:30  [ТС]     Выход из двух циклов сразу (без goto) #5
Цитата Сообщение от krolex Посмотреть сообщение
break;
break - выход из одного цикла
krolex
9 / 9 / 1
Регистрация: 27.01.2010
Сообщений: 63
27.04.2010, 00:34     Выход из двух циклов сразу (без goto) #6
Цитата Сообщение от PointsEqual Посмотреть сообщение
break - выход из одного цикла
а сразу поставить второй break во внешнем цикле?)))
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
27.04.2010, 00:44  [ТС]     Выход из двух циклов сразу (без goto) #7
krolex, пример пожалуста можно?

Добавлено через 1 минуту
Цитата Сообщение от krolex Посмотреть сообщение
При вводе отрицательного числа работа программы завершается.
это к чему? мне же надо выход из циклов, а не завершение программы

Добавлено через 7 минут
Mulat, а код который выходит из 2-циклов с помощью return не напишеш?
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,498
27.04.2010, 00:46     Выход из двух циклов сразу (без goto) #8
PointsEqual, попробуй так:
C++
1
2
3
4
5
6
7
8
9
10
11
..
for (int i=0; i<ROWS; i++)
    for (int j=0; j<COLS; j++){
        if (mas[i][j]==0){
            i = ROWS;
            break;
        } //то выход из обоих циклов
        std::cout<<mas[i][j];
    }
}
...
krolex
9 / 9 / 1
Регистрация: 27.01.2010
Сообщений: 63
27.04.2010, 00:48     Выход из двух циклов сразу (без goto) #9
прост пример,где break срабатывает при такомто условии....
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
27.04.2010, 00:52  [ТС]     Выход из двух циклов сразу (без goto) #10
easybudda, как же я сам не додумался(((
только вот так лучше
C++
1
i = ROWS-1;
спасибо.

Добавлено через 56 секунд
Цитата Сообщение от krolex Посмотреть сообщение
прост пример,где break срабатывает при такомто условии....
срабатывает, но первый цикл продолжается ведь с новой итерации
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,498
27.04.2010, 00:52     Выход из двух циклов сразу (без goto) #11
Цитата Сообщение от PointsEqual Посмотреть сообщение
только вот так лучше
это чем же? по сути лишнее действие выполняется...
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
27.04.2010, 01:01  [ТС]     Выход из двух циклов сразу (без goto) #12
Цитата Сообщение от easybudda Посмотреть сообщение
это чем же?
а вот так
C++
1
i = ROWS;
ошибка выскакивает у меня

Добавлено через 7 минут
еще читал про функцию longjmp, но так и не разобрался, че она увеличивает, кому чего передает)
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,498
27.04.2010, 01:04     Выход из двух циклов сразу (без goto) #13
Цитата Сообщение от PointsEqual Посмотреть сообщение
ошибка выскакивает у меня
странно, с чего бы?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
 
#define ROWS 3
#define COLS 4
int main(void){
    int m[ROWS][COLS] = {
        { 3, 4, 2, 1 },
        { 5, 7, 0, 9 },
        { 4, 2, 1, 3 }
    };
    int i, j;
    
    for ( i = 0; i < ROWS; ++i ){
        for ( j = 0; j < COLS; ++j ){
            if ( !m[i][j] ){
                i = ROWS;
                break;
            }
            printf("%d ", m[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}
Выход из двух циклов сразу (без goto)
Единственная опасность при маргинальных случаях типа ROWS = INT_MAX но для таких лучше в качестве индексов более ёмкие типы данных использовать...
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
27.04.2010, 01:09  [ТС]     Выход из двух циклов сразу (без goto) #14
easybudda, может из за этого ?)
C++
1
std::vector< std::vector<int> > mas(ROWS, std::vector<int>(COLS));
а твой код, да, компилится без проблем
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2010, 05:47     Выход из двух циклов сразу (без goto)
Еще ссылки по теме:
C++ Вычислить сумму следующего ряда без вложенных циклов
Вставка одного вектора в другой через один без циклов C++
C++ Запускается без cmd и закрывается сразу
C++ Как скопировать массив в вектор одной строкой без использования циклов и алгоритмов STL?
C++ Страуструп. Сортировка трех чисел .Как сделать проще код без циклов и массивов?

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

Или воспользуйтесь поиском по форуму:
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
27.04.2010, 05:47     Выход из двух циклов сразу (без goto) #15
Вообще это тот случай, когда goto как раз кстати. Но если дело принципа то заводишь отдельную переменную, которая будет выполнять роль флага. Если нужно прервать оба цикла из внутреннего, устанавливаешь флаг, делаешь бряк. Во внешнем цикле после внутреннего сразу проверяешь флаг, если установлен, то опять бряк.
Yandex
Объявления
27.04.2010, 05:47     Выход из двух циклов сразу (без goto)
Ответ Создать тему
Опции темы

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