Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Xopecc
33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250
#1

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

28.01.2014, 15:40. Просмотров 2090. Ответов 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
#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++), а нужно, чтобы выходил из обоих сразу
http://www.cyberforum.ru/cpp-beginners/thread1688590.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 15:40
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Выход из двойного цикла (C++):

Счётчик двойного цикла, без дополнительных переменных
как в двойном цикле, for(int i = 0; i &lt; 5; ++i) for(int j = 0; j &lt; 5;...

Завершение двойного цикла при достижении заданного условия
Есть у меня такой код: #include&lt;iostream&gt; using namespace std; int...

Выход из цикла
Ув. программисты я пишу крестики-нолики, но возникла некоторая проблема с...

Выход из цикла
Доброго времени суток. Подскажите, пожалуйста как сделать выход из цикла при...

С++ Выход из цикла
Есть цикл, написанный в дополнительной функции. Нужно вывести сумму нескольких...

25
jurok_85
263 / 247 / 182
Регистрация: 21.02.2013
Сообщений: 589
Завершенные тесты: 1
28.01.2014, 15:53 #2
Можно так
C++
1
2
3
4
5
6
7
8
9
10
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;}
        }
        if(Exit == '.'){
                break;}
    }
1
vovacreme
61 / 61 / 33
Регистрация: 14.01.2014
Сообщений: 145
28.01.2014, 15:54 #3
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 == '.'){
                goto M;}
        }
    } M: ;
    cout<<"\n\n\t\tПроизошло прекращение ввода данных :)";//Строчка проверки
    cout<<"\n\nДля выхода нажмите любую клавишу...";
    _getch();
    return 0;
}
0
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
28.01.2014, 15:55 #4
Оформить цикл в функцию и вставить return.
1
Xopecc
33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250
28.01.2014, 16:05  [ТС] #5
Цитата Сообщение от Ilot Посмотреть сообщение
Оформить цикл в функцию и вставить return.
Не хотелось бы вставлять функцию в функцию лишний раз (у меня в коде это функция ввода )

Добавлено через 54 секунды
jurok_85, блин, такой простой способ не заметил
0
ValeryS
Модератор
7127 / 5395 / 669
Регистрация: 14.02.2011
Сообщений: 18,212
28.01.2014, 16:07 #6
еще один путь без лишних переменных
C++
1
2
3
4
5
6
7
8
9
for(int i=0;i<10;i++)
 {
   int j;   
    for(j=0;j<10;j++)
        if(xz==xy)//выполнилось какоето условие
           break;  // выходим из внутреннего цикла
   if(j<10)// если j<10  значит вышли раньше времени из внутреннего цикла
    break; // выходим из внешнего
 }
0
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
28.01.2014, 16:07 #7
Цитата Сообщение от Xopecc Посмотреть сообщение
Не хотелось бы вставлять функцию в функцию лишний раз
Это лучше, чем дублировать проверки.
0
Xopecc
33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250
28.01.2014, 16:16  [ТС] #8
Цитата Сообщение от 0x10 Посмотреть сообщение
Это лучше, чем дублировать проверки.
Так-с, возник еще один вопрос... Нужно сделать обнуление всех данных одного элемента, если введены не полные данные, но был прекращен ввод.
0
RussDragon
12 / 12 / 1
Регистрация: 08.04.2012
Сообщений: 81
28.01.2014, 16:20 #9
Цитата Сообщение от ValeryS Посмотреть сообщение
еще один путь без лишних переменных
C++
1
2
3
4
5
6
7
8
9
for(int i=0;i<10;i++)
 {
   int j;   
    for(j=0;j<10;j++)
        if(xz==xy)//выполнилось какоето условие
           break;  // выходим из внутреннего цикла
   if(j<10)// если j<10  значит вышли раньше времени из внутреннего цикла
    break; // выходим из внешнего
 }
Эмм... У вас тут только if(j=0;j<10;j++) во внутреннем цикле, а break выполниться при первом же проходе, да и при том, из "главного".
0
Xopecc
33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250
28.01.2014, 16:21  [ТС] #10
RussDragon, тоже это заметил
0
ValeryS
Модератор
7127 / 5395 / 669
Регистрация: 14.02.2011
Сообщений: 18,212
28.01.2014, 16:33 #11
Цитата Сообщение от Xopecc Посмотреть сообщение
Нужно сделать обнуление всех данных одного элемента, если введены не полные данные, но был прекращен ввод.
обнуляешь запись(элемент)
вводишь данные во временную переменную(структуру)
если ввод корректен то копируешь из временной переменной в нужный элемент

Добавлено через 11 минут
Цитата Сообщение от RussDragon Посмотреть сообщение
Эмм... У вас тут только if(j=0;j<10;j++) во внутреннем цикле, а break выполниться при первом же проходе, да и при том, из "главного".
при проходе внутреннего цикла
j будет равно 10
при инициализации цикла j равно 0
потом десять раз j++
в результате j<10 ЛОЖЬ в тело не входим бряк не срабатывает
теперь если сработал внутренний бряк
j будет меньше 10
значит входим в условие и выходим из внешнего цикла
могу написать со скобками чтобы было понятно что куда
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for(int i=0;i<10;i++)
{
  int j;   // обявлена вне цикла
    for(j=0;j<10;j++) // здесь j меняется от 0 до 10
        {
         if(xz==xy)//выполнилось какоето условие
           {
             break;  // выходим из внутреннего цикла
            }
         }
  // а вот здесь j будет иметь значения от 0 до 10
 // она все еще видна поскольку объявлена вне цикла
  // если цикл отработал нормально то j 10
  // если нет то j имеет значения 0-9
   if(j<10)// если j<10  значит вышли раньше времени из внутреннего цикла
        { 
        break; // выходим из внешнего
        }
 }
0
Xopecc
33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250
28.01.2014, 16:47  [ТС] #12
ValeryS, Так запутано и не запутано сразу, что путаешься, где не путался, и распутываешься, где путался
0
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
28.01.2014, 16:51 #13
Цитата Сообщение от Xopecc Посмотреть сообщение
Не хотелось бы вставлять функцию в функцию лишний раз (у меня в коде это функция ввода )
Так вот и сделайте ф-ю ввода. Я же об этом и говорю. А пользование оператором goto есть плохой признак.
0
Байт
Эксперт C
17764 / 11789 / 2449
Регистрация: 24.12.2010
Сообщений: 23,710
28.01.2014, 16:53 #14
C++
1
2
3
4
for (j=0; j<10; j++) {
  if (...) break;
}
for(; j<10; j++) x[j] = 0;
0
programina
2049 / 604 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
28.01.2014, 16:53 #15
C++
bool bExit = false;
 
while(!bExit)
{
  while(1)
  {
    if(GetAsyncKeyState(VK_ESCAPE)) 
    {
      bExit = true;
      break;
    }
 
    // ...
 
  }
}
0
Fene4ka_
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,244
28.01.2014, 16:57 #16
Цитата Сообщение от Xopecc Посмотреть сообщение
Не хотелось бы вставлять функцию в функцию лишний раз (у меня в коде это функция ввода )

Добавлено через 54 секунды
jurok_85, блин, такой простой способ не заметил
замечательный способ предложил Ilot ... код становится понятнее и проще
0
Xopecc
33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250
28.01.2014, 17:16  [ТС] #17
Ilot, собственно функции ввода это и есть... недописанная(ненадолго отложил код)
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
struct Auto{
    char Marka [30];
    char Model [30];
    int MakeYear;
    char Color [20];
    double price;
    double rating;
};
void InPut(Auto x)
{
    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Произошло прекращение ввода данных :)";
 
}
P.S.Часть кода...

Добавлено через 2 минуты
programina,
C++
1
if(GetAsyncKeyState(VK_ESCAPE))
Это проверяется нажатие клавиши Escape?
0
programina
2049 / 604 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
28.01.2014, 17:28 #18
Цитата Сообщение от Xopecc Посмотреть сообщение
programina,
Код C++
1
if(GetAsyncKeyState(VK_ESCAPE))
Это проверяется нажатие клавиши Escape?
Да, но это работает только в ОС Виндовс.
0
Xopecc
33 / 28 / 9
Регистрация: 13.09.2013
Сообщений: 250
28.01.2014, 17:31  [ТС] #19
programina, мне пока другого не нужно
0
programina
2049 / 604 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
28.01.2014, 17:38 #20
Xopecc, тогда не забудьте подключить
C++
#include <windows.h>
0
28.01.2014, 17:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2014, 17:38
Привет! Вот еще темы с решениями:

Выход из цикла
Есть цикл. Он выполняется. Долго. Пока он выполняется я нажимаю Esc и он...

Выход за пределы цикла
Вообщем необходимо реализовать алгоритм по пунктам от 1 до 27 и в них есть...

Преждевременный выход из цикла
Здраствуйте! Спасибо за внимание. Стояла задача: 1. построить двумерный...

Автоматический выход из цикла.
имеется код: int main() { square s; //объект класса unsigned char...


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

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

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