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

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

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

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

27.04.2010, 00:12. Просмотров 4099. Ответов 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];
    }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2010, 00:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выход из двух циклов сразу (без goto) (C++):

Повторно запустить оператор switch без goto, циклов и доп. функций - C++
Как сабж? int intSum = 0; int main(void) { int intInteger01, intInteger02; int intSwitch; cout &lt;&lt; &quot;Input integer #1...

Критично ли использование goto при выходе из циклов? - C++
#include &lt;conio.h&gt; #include &lt;iostream.h&gt; void main() { int a,n,i,s=0; cout&lt;&lt;&quot;\tInput n&lt;=20&quot;&lt;&lt;endl; cin&gt;&gt;n; cout&lt;&lt;&quot;\n\t Massiv...

сумма элементов массива без циклов - C++
нужно написать функцию написания подсчета суммы элементов массива не используя циклов, условий и используя рекурсию максимум 1 раз.

Одновременная работу двух циклов openMP - C++
как можно сделать так чтобы два цикла работали одновременно? #pragma omp parallel { #pragma omp sections { #pragma omp...

Перевернуть число без помощи массивов циклов - C++
перевернуть число без помощи массивов циклов и тд. т.е stdio.h ,если это вообще возможно?

Заполнение двумерного массива без вложенных циклов - C++
Как такое можно реализовать? Нужно каким-то образом плясать от индекса, как мне кажется, но вот как?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Mulat
7 / 7 / 0
Регистрация: 09.01.2009
Сообщений: 41
27.04.2010, 00:23 #2
return?
0
PointsEqual
ниначмуроФ
835 / 519 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
27.04.2010, 00:25  [ТС] #3
Цитата Сообщение от Mulat Посмотреть сообщение
return?
return требует число, а если поставлю число (return 1) то конец программе
0
krolex
9 / 9 / 1
Регистрация: 27.01.2010
Сообщений: 63
27.04.2010, 00:27 #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);
0
Миниатюры
Выход из двух циклов сразу (без goto)  
PointsEqual
ниначмуроФ
835 / 519 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
27.04.2010, 00:30  [ТС] #5
Цитата Сообщение от krolex Посмотреть сообщение
break;
break - выход из одного цикла
0
krolex
9 / 9 / 1
Регистрация: 27.01.2010
Сообщений: 63
27.04.2010, 00:34 #6
Цитата Сообщение от PointsEqual Посмотреть сообщение
break - выход из одного цикла
а сразу поставить второй break во внешнем цикле?)))
0
PointsEqual
ниначмуроФ
835 / 519 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
27.04.2010, 00:44  [ТС] #7
krolex, пример пожалуста можно?

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

Добавлено через 7 минут
Mulat, а код который выходит из 2-циклов с помощью return не напишеш?
0
easybudda
Модератор
Эксперт CЭксперт С++
9624 / 5572 / 947
Регистрация: 25.07.2009
Сообщений: 10,707
27.04.2010, 00:46 #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];
    }
}
...
2
krolex
9 / 9 / 1
Регистрация: 27.01.2010
Сообщений: 63
27.04.2010, 00:48 #9
прост пример,где break срабатывает при такомто условии....
0
PointsEqual
ниначмуроФ
835 / 519 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
27.04.2010, 00:52  [ТС] #10
easybudda, как же я сам не додумался(((
только вот так лучше
C++
1
i = ROWS-1;
спасибо.

Добавлено через 56 секунд
Цитата Сообщение от krolex Посмотреть сообщение
прост пример,где break срабатывает при такомто условии....
срабатывает, но первый цикл продолжается ведь с новой итерации
0
easybudda
Модератор
Эксперт CЭксперт С++
9624 / 5572 / 947
Регистрация: 25.07.2009
Сообщений: 10,707
27.04.2010, 00:52 #11
Цитата Сообщение от PointsEqual Посмотреть сообщение
только вот так лучше
это чем же? по сути лишнее действие выполняется...
0
PointsEqual
ниначмуроФ
835 / 519 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
27.04.2010, 01:01  [ТС] #12
Цитата Сообщение от easybudda Посмотреть сообщение
это чем же?
а вот так
C++
1
i = ROWS;
ошибка выскакивает у меня

Добавлено через 7 минут
еще читал про функцию longjmp, но так и не разобрался, че она увеличивает, кому чего передает)
0
easybudda
Модератор
Эксперт CЭксперт С++
9624 / 5572 / 947
Регистрация: 25.07.2009
Сообщений: 10,707
27.04.2010, 01:04 #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 но для таких лучше в качестве индексов более ёмкие типы данных использовать...
1
PointsEqual
ниначмуроФ
835 / 519 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
27.04.2010, 01:09  [ТС] #14
easybudda, может из за этого ?)
C++
1
std::vector< std::vector<int> > mas(ROWS, std::vector<int>(COLS));
а твой код, да, компилится без проблем
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
27.04.2010, 05:47 #15
Вообще это тот случай, когда goto как раз кстати. Но если дело принципа то заводишь отдельную переменную, которая будет выполнять роль флага. Если нужно прервать оба цикла из внутреннего, устанавливаешь флаг, делаешь бряк. Во внешнем цикле после внутреннего сразу проверяешь флаг, если установлен, то опять бряк.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2010, 05:47
Привет! Вот еще темы с ответами:

Нужно переделать из двух циклов for в один цикл for - C++
Народ у меня код считает сумму введенных элементов массив до последнего положительного элемента. Мне нужно чтобы он считал сумму только от...

Вычислить сумму следующего ряда без вложенных циклов - C++
Hе используя стандаpтные функции (за исключением abs ), вычислить сумму следующего pяда с заданной точностью Е &gt; 0 без вложенных циклов. ...

Вставка одного вектора в другой через один без циклов - C++
Поставили интересную задачу: вставить элементы одного вектора в другой без использования циклов. Рекурсия считается как цикл. Пользоваться...

Запускается без cmd и закрывается сразу - C++
cpp файл #include &lt;sstream&gt; #include &lt;string&gt; #include &quot;IntList.h&quot; using namespace std; IntList::IntList(const IntList &amp;...


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

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

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