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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
#1

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

28.01.2014, 15:40. Просмотров 1424. Ответов 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++), а нужно, чтобы выходил из обоих сразу
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jurok_85
238 / 221 / 76
Регистрация: 21.02.2013
Сообщений: 515
Завершенные тесты: 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;}
    }
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
Модератор
Эксперт С++
1780 / 1155 / 223
Регистрация: 16.05.2013
Сообщений: 3,042
Записей в блоге: 5
Завершенные тесты: 1
28.01.2014, 15:55     Выход из двойного цикла #4
Оформить цикл в функцию и вставить return.
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
28.01.2014, 16:05  [ТС]     Выход из двойного цикла #5
Цитата Сообщение от Ilot Посмотреть сообщение
Оформить цикл в функцию и вставить return.
Не хотелось бы вставлять функцию в функцию лишний раз (у меня в коде это функция ввода )

Добавлено через 54 секунды
jurok_85, блин, такой простой способ не заметил
ValeryS
Модератор
6449 / 4915 / 451
Регистрация: 14.02.2011
Сообщений: 16,298
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
2442 / 1614 / 235
Регистрация: 24.11.2012
Сообщений: 3,963
28.01.2014, 16:07     Выход из двойного цикла #7
Цитата Сообщение от Xopecc Посмотреть сообщение
Не хотелось бы вставлять функцию в функцию лишний раз
Это лучше, чем дублировать проверки.
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
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
Сообщений: 250
28.01.2014, 16:21  [ТС]     Выход из двойного цикла #10
RussDragon, тоже это заметил
ValeryS
Модератор
6449 / 4915 / 451
Регистрация: 14.02.2011
Сообщений: 16,298
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
Сообщений: 250
28.01.2014, 16:47  [ТС]     Выход из двойного цикла #12
ValeryS, Так запутано и не запутано сразу, что путаешься, где не путался, и распутываешься, где путался
Ilot
Модератор
Эксперт С++
1780 / 1155 / 223
Регистрация: 16.05.2013
Сообщений: 3,042
Записей в блоге: 5
Завершенные тесты: 1
28.01.2014, 16:51     Выход из двойного цикла #13
Цитата Сообщение от Xopecc Посмотреть сообщение
Не хотелось бы вставлять функцию в функцию лишний раз (у меня в коде это функция ввода )
Так вот и сделайте ф-ю ввода. Я же об этом и говорю. А пользование оператором goto есть плохой признак.
Байт
Эксперт C
 Аватар для Байт
15041 / 9443 / 1382
Регистрация: 24.12.2010
Сообщений: 17,471
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_
87 / 87 / 16
Регистрация: 24.01.2014
Сообщений: 1,196
28.01.2014, 16:57     Выход из двойного цикла #16
Цитата Сообщение от Xopecc Посмотреть сообщение
Не хотелось бы вставлять функцию в функцию лишний раз (у меня в коде это функция ввода )

Добавлено через 54 секунды
jurok_85, блин, такой простой способ не заметил
замечательный способ предложил Ilot ... код становится понятнее и проще
Xopecc
33 / 28 / 2
Регистрация: 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?
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
Сообщений: 250
28.01.2014, 17:31  [ТС]     Выход из двойного цикла #19
programina, мне пока другого не нужно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2014, 17:38     Выход из двойного цикла
Еще ссылки по теме:

Выход из цикла C++
C++ Как сделать выход из программы при условии нажатия двойного ввода
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     Выход из двойного цикла
Ответ Создать тему
Опции темы

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