Форум программистов, компьютерный форум 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
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;}
    }
vovacreme
-16 / 61 / 13
Регистрация: 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;
}
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
28.01.2014, 15:55     Выход из двойного цикла #4
Оформить цикл в функцию и вставить return.
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 246
28.01.2014, 16:05  [ТС]     Выход из двойного цикла #5
Цитата Сообщение от Ilot Посмотреть сообщение
Оформить цикл в функцию и вставить return.
Не хотелось бы вставлять функцию в функцию лишний раз (у меня в коде это функция ввода )

Добавлено через 54 секунды
jurok_85, блин, такой простой способ не заметил
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
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; // выходим из внешнего
 }
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
28.01.2014, 16:07     Выход из двойного цикла #7
Цитата Сообщение от Xopecc Посмотреть сообщение
Не хотелось бы вставлять функцию в функцию лишний раз
Это лучше, чем дублировать проверки.
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 246
28.01.2014, 16:16  [ТС]     Выход из двойного цикла #8
Цитата Сообщение от 0x10 Посмотреть сообщение
Это лучше, чем дублировать проверки.
Так-с, возник еще один вопрос... Нужно сделать обнуление всех данных одного элемента, если введены не полные данные, но был прекращен ввод.
RussDragon
 Аватар для 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 выполниться при первом же проходе, да и при том, из "главного".
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 246
28.01.2014, 16:21  [ТС]     Выход из двойного цикла #10
RussDragon, тоже это заметил
ValeryS
Модератор
6374 / 4840 / 442
Регистрация: 14.02.2011
Сообщений: 16,043
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; // выходим из внешнего
        }
 }
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 246
28.01.2014, 16:47  [ТС]     Выход из двойного цикла #12
ValeryS, Так запутано и не запутано сразу, что путаешься, где не путался, и распутываешься, где путался
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
28.01.2014, 16:51     Выход из двойного цикла #13
Цитата Сообщение от Xopecc Посмотреть сообщение
Не хотелось бы вставлять функцию в функцию лишний раз (у меня в коде это функция ввода )
Так вот и сделайте ф-ю ввода. Я же об этом и говорю. А пользование оператором goto есть плохой признак.
Байт
 Аватар для Байт
13961 / 8792 / 1223
Регистрация: 24.12.2010
Сообщений: 15,924
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;
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 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;
    }
 
    // ...
 
  }
}
Fene4ka_
84 / 84 / 16
Регистрация: 24.01.2014
Сообщений: 1,142
28.01.2014, 16:57     Выход из двойного цикла #16
Цитата Сообщение от Xopecc Посмотреть сообщение
Не хотелось бы вставлять функцию в функцию лишний раз (у меня в коде это функция ввода )

Добавлено через 54 секунды
jurok_85, блин, такой простой способ не заметил
замечательный способ предложил Ilot ... код становится понятнее и проще
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 246
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?
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
28.01.2014, 17:28     Выход из двойного цикла #18
Цитата Сообщение от Xopecc Посмотреть сообщение
programina,
Код C++
1
if(GetAsyncKeyState(VK_ESCAPE))
Это проверяется нажатие клавиши Escape?
Да, но это работает только в ОС Виндовс.
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 246
28.01.2014, 17:31  [ТС]     Выход из двойного цикла #19
programina, мне пока другого не нужно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2014, 17:38     Выход из двойного цикла
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
28.01.2014, 17:38     Выход из двойного цикла #20
Xopecc, тогда не забудьте подключить
C++
#include <windows.h>
Yandex
Объявления
28.01.2014, 17:38     Выход из двойного цикла
Ответ Создать тему
Опции темы

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