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

Выход из двойного цикла - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 246
28.01.2014, 15:40     Выход из двойного цикла #1
Как выйти при нажатии определенной кнопки из двойного цикла:
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
#include<conio.h>
#include<iostream>
#include<cmath>
#include<cstring>
#include<cctype>
using namespace std;
int main(){
    setlocale(LC_ALL, "Russian");
    const int N = 20;
    char Exit;
    cout<<"\t\t Ввод данных о машинах(до 20 машин)\n\n";
    for(int i(0); i<N; i++){
        cout<<"\t\tДанные для "<<i+1<<" машины\n\n";
        for(int j(0); j<N; j++){
                Exit = _getch();
                if(Exit == '.'){
                break;}
        }
    }
    cout<<"\n\n\t\tПроизошло прекращение ввода данных :)";//Строчка проверки
    cout<<"\n\nДля выхода нажмите любую клавишу...";
    _getch();
    return 0;
}
При нажатии '.' происходит выход из цикла for(int j(0); j<N; j++), а нужно, чтобы выходил из обоих сразу
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 15:40     Выход из двойного цикла
Посмотрите здесь:

C++ счётчик двойного цикла, без доволнительных переменных
Выход из цикла C++
Выход из цикла C++
Принудительный выход из цикла C++
Преждевременный выход из цикла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 246
28.01.2014, 18:00  [ТС]     Выход из двойного цикла #21
programina, Непременно
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gunslinger
случайный прохожий
 Аватар для gunslinger
1097 / 715 / 184
Регистрация: 20.07.2013
Сообщений: 1,970
28.01.2014, 18:11     Выход из двойного цикла #22
C++
1
2
3
4
5
if(Exit == '.')
{
  i = N;
  break;
}
Alex5
883 / 618 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
28.01.2014, 18:49     Выход из двойного цикла #23
Можно использовать исключения.
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
26
27
28
29
30
 //  Ввод данных 
 
    enum Codes { STOP_INPUT, STOP_2 , STOP_3 }; // в исключении используем тип  Codes 
 
    try
    {
        for(int i(0); i<N; i++){
            cout<<"\t\tДанные для "<<i+1<<" машины\n\n";
            for(int j(0); j<N; j++){
                Exit = _getch();
 
                if(Exit == '.')
                {
                    throw( STOP_INPUT ); /* вместо break используем throw  */
                    //break;  
                }
            }
        }
    }
    catch( Codes excep )   /* обработка исключения */
    {
        switch( excep )
        {
        case STOP_INPUT:
            cout<<"\n\n\t\tПроизошло прекращение ввода данных :)";
            break;
        // case ... : // если необходимо, можно предусмотреть другие варианты 
        //  break;
        }
    }
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 246
29.01.2014, 14:18  [ТС]     Выход из двойного цикла #24
Alex5, пожалуй использую понятные мне алгоритмы
P.S. Тему исключений не проходил
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
29.01.2014, 15:27     Выход из двойного цикла #25
Ну давайте порассуждаем.
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<conio.h>
#include<iostream>
#include<cmath>
#include<cstring>
#include<cctype>
using namespace std;
int main(){
    setlocale(LC_ALL, "Russian");
    const int N = 20;
    char Exit;
    cout<<"\t\t Ввод данных о машинах(до 20 машин)\n\n";
    for(int i(0); i<N; i++){
        cout<<"\t\tДанные для "<<i+1<<" машины\n\n";
        for(int j(0); j<N; j++){
                Exit = _getch();
                if(Exit == '.'){
                goto halt;}
        }
    }
    halt:
    cout<<"\n\n\t\tПроизошло прекращение ввода данных :)";//Строчка проверки
    cout<<"\n\nДля выхода нажмите любую клавишу...";
    _getch();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2014, 17:03     Выход из двойного цикла
Еще ссылки по теме:

Выход из вложенного цикла C++
Принудительный выход из цикла C++
Выход из цикла C++

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

Или воспользуйтесь поиском по форуму:
daslex
29.01.2014, 17:03     Выход из двойного цикла
  #26

Не по теме:

Для перехода сверху вниз, при выходе из кучи вложенных друг в друг циклов, оператор goto использовать нормально и к признакам дурных манер это не имеет никакого отношения. Экономится память, сокращаются такты, сокращается листинг, не нарушается чтение кода, такое построение кода никак не мешает отладке, уменьшается вероятность ошибок при проверках обработки цикла. Дурной признак - это когда делаешь так как сложнее или что-то такое, что способствует осложнению.

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

Yandex
Объявления
29.01.2014, 17:03     Выход из двойного цикла
Ответ Создать тему
Опции темы

Текущее время: 09:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru