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

Switch - case - C++

Восстановить пароль Регистрация
 
sandrwe
0 / 0 / 0
Регистрация: 08.02.2014
Сообщений: 25
25.03.2014, 13:41     Switch - case #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
25
26
27
switch(a)
{
    case 1:
    {
       case 1:
       case 2:
       switch(aa)
       {
             case 1:
         case 2:
         case 3:
         case 4:
       }
       case 3:
       case 4:
    }
    case 2:
    {
       switch(ab)
       {
       case 1:
       case 2:
       case 3:
       case 4:
        }
    }
}
Как мне сделать так, чтоб я мог возвращаться с высших уровней switch-case'a ни низшие.
Например, я выбрал "a", потом выбрал "aa", и мог возвратиться к выбору "a"?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2014, 13:41     Switch - case
Посмотрите здесь:

C++ switch case
C++ switch i case
case-switch C++
C++ switch-case, как писать в самом case
C++ Switch (Case)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
25.03.2014, 13:51     Switch - case #2
По дефолту ты туда и вернёшься, так что вопрос стоит: как не вернуться из вложенного switch в case внешнего. И здесь ответ один: используй return во вложенном.
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,044
25.03.2014, 13:59     Switch - case #3
Цитата Сообщение от sandrwe Посмотреть сообщение
C++
1
2
3
4
case 1:
   {
      case 1:
      case 2:
что ты этим хотел сказать?
sandrwe
0 / 0 / 0
Регистрация: 08.02.2014
Сообщений: 25
25.03.2014, 14:01  [ТС]     Switch - case #4
Как это должно выглядеть? "return a" что-ли?

Добавлено через 46 секунд
Забыл switch дописать
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
25.03.2014, 14:07     Switch - case #5
Цитата Сообщение от sandrwe Посмотреть сообщение
Как это должно выглядеть? "return a" что-ли?
А что должна вернуть функция? Вот её значение и возвращай, иначе вывалишься из switch во внешний case. А если тебе именно этого и надо, то хоть break юзай, хоть вообще ничего не делай.
sandrwe
0 / 0 / 0
Регистрация: 08.02.2014
Сообщений: 25
25.03.2014, 14:10  [ТС]     Switch - case #6
Функция ничего не возвращает. Просто выводит на экран информацию о обьекте.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
25.03.2014, 14:17     Switch - case #7
Тогда просто
C++
1
return;
. Чтоб не вываливаться во внешний case.
sandrwe
0 / 0 / 0
Регистрация: 08.02.2014
Сообщений: 25
25.03.2014, 14:23  [ТС]     Switch - case #8
ошибка
C++
1
error: return statement with no value, in function returning 'int'
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,167
Завершенные тесты: 1
25.03.2014, 14:25     Switch - case #9
Цитата Сообщение от sandrwe Посмотреть сообщение
Функция ничего не возвращает
Цитата Сообщение от sandrwe Посмотреть сообщение
in function returning 'int'
Все-таки возвращает int....
так напишите return 0;
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
25.03.2014, 14:26     Switch - case #10
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
switch(a)
{
 case 1: std::cout<<"1"<<std::endl;
 switch(b)
 {
  case 1: std::cout<<"2"<<std::endl;
  case 2: std::cout<<"3"<<std::endl;
  switch(с)
  {
    case 1: std::cout<<"4"<<std::endl;
    case 2: std::cout<<"5"<<std::endl;
    case 3: std::cout<<"6"<<std::endl;
    case 4: std::cout<<"7"<<std::endl;
  }
  std::cout<<"8"<<std::endl;
  case 3: std::cout<<"9"<<std::endl;
  case 4: std::cout<<"10"<<std::endl;
 }
 std::cout<<"11"<<std::endl;
 case 2:std::cout<<"12"<<std::endl;
 switch(d)
 {
   case 1: std::cout<<"13"<<std::endl;
   case 2: std::cout<<"14"<<std::endl;
   case 3: std::cout<<"15"<<std::endl;
   case 4: std::cout<<"16"<<std::endl;
  }
  std::cout<<"17"<<std::endl;
}
std::cout<<"18"<<std::endl;
при a=1, b=2, c=3 выведет:
1
3
6
7
8
9
10
11
12
13
14
15
16
17
18, а
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
switch(a)
{
 case 1: std::cout<<"1"<<std::endl;
 switch(b)
 {
  case 1: std::cout<<"2"<<std::endl;
  break;
  case 2: std::cout<<"3"<<std::endl;
  switch(с)
  {
    case 1: std::cout<<"4"<<std::endl;
    break;
    case 2: std::cout<<"5"<<std::endl;
    break;
    case 3: std::cout<<"6"<<std::endl;
    break;
    case 4: std::cout<<"7"<<std::endl;
    break;
  }
  std::cout<<"8"<<std::endl;
  break;
  case 3: std::cout<<"9"<<std::endl;
  break;
  case 4: std::cout<<"10"<<std::endl;
  break;
 }
 std::cout<<"11"<<std::endl;
 break;
 case 2:std::cout<<"12"<<std::endl;
 break;
 switch(d)
 {
   case 1: std::cout<<"13"<<std::endl;
   break;
   case 2: std::cout<<"14"<<std::endl;
   break;
   case 3: std::cout<<"15"<<std::endl;
   break;
   case 4: std::cout<<"16"<<std::endl;
   break;
  }
  std::cout<<"17"<<std::endl;
  break;
}
std::cout<<"18"<<std::endl;
при тех же условиях выведет:
1
3
6
8
11
17
18.

Добавлено через 45 секунд
Цитата Сообщение от sandrwe Посмотреть сообщение
ошибка
Код C++
1
error: return statement with no value, in function returning 'int'
А кто то только что утверждал, что функция ничего не возвращает, а только выводи инфу от объекте.
sandrwe
0 / 0 / 0
Регистрация: 08.02.2014
Сообщений: 25
25.03.2014, 14:43  [ТС]     Switch - case #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int aa;
                cin>>aa;
                switch(aa)
                {
                    case 1: {cout<<"Wpisz ID studenta--> ";        //IFORMACJA O STUDENTACH
                    string aaa;
                    cin>>aaa;
                    for(int i=0; i<36; i++)
                    {
                        if(aaa==ocn[i]->s_get_id())
                        {
                            ocn[i]->o_wypisz_2();
                            ocn[i]->s_get_kierunek();
                        }
                    }
                    //break;
                    return 0;}
Просветите неопытного кто тут что возвращает)
П.С при return 0, программа вырубается
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
25.03.2014, 14:48     Switch - case #12
Это ты должен знать, что хочешь вернуть. Но если бы функция ничего не возвращала, то была бы void, а тогда не было бы процитировной тобой гогомессаги, в которой как раз и говорится, что функция обязана вернуть значение, так как её тип int. И вся прога не может вырубаться по
C++
1
return 0;
из функции.
sandrwe
0 / 0 / 0
Регистрация: 08.02.2014
Сообщений: 25
25.03.2014, 14:53  [ТС]     Switch - case #13
Страшно извиняюсь, это меню у меня в main-файле. Тупанул.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
25.03.2014, 14:54     Switch - case #14
Так ты даже декомпозицию не сделал?
sandrwe
0 / 0 / 0
Регистрация: 08.02.2014
Сообщений: 25
25.03.2014, 14:57  [ТС]     Switch - case #15
В смысле просто разделить все это на методы?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2014, 15:16     Switch - case
Еще ссылки по теме:

Switch-case C++
C++ switch и case
C++ Switch - Case

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
25.03.2014, 15:16     Switch - case #16
Нет. Методы - это функции-члены класса, например, o_wypisz_2() - это, судя по синтаксису вызова, метод. Их назначение - выполнение отдельных не элементарных операций с объектами. А декомпозиция - это разделение задачи на подзадачи, при программировании выливающееся в разделение программы на подпрограммы, каждая из которых решает свою подзадачу. Не одну операцию, а целую задачу, но являющуюся частью другой задачи. Это в том числе, выделение некоторых последовательностей операций в неэлементарные операции, но выделение методов - только часть декомпозиции и если в итоге прямо в функции main оказывается сложный вывод подробной инффы об объекте вместо вызова соответствующей функции, то декомпозиция всё ещё не сделана. Возможно, она начата, возможно выполнена часть декомпозиции, но не более того. Задача целиком и так бывает слишком сложна, чтоб нагружать main ещё и этим. Вывод одного значения поля объекта может быть и в main. Но не три уровня свичей в рамках подзадачи описания состояния объекта.

Добавлено через 7 минут
Я правильно понимаю, что ты делаешь объектную базу данных о студентах? Тогда ещё должны быть подзадачи ввода информации о студенте с клавиатуры, сохранения базы на диск, чтения базы, или её части с диска, выборки объектов по некоторому признаку... Всё это сваливать в main? Пожалей тех, кто будет читать прогу целиком, искать в ней ошибки, или вносить изменения, не будучи её автором, либо основательно забыв замесел.
Yandex
Объявления
25.03.2014, 15:16     Switch - case
Ответ Создать тему
Опции темы

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