Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91
1

не выполняется switch

01.12.2011, 08:14. Показов 6003. Ответов 37
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
первый вложенный цикл выполняется корректно, но второй - после выбора вылетает из программы, т.е. ввожу константу и все - блок {} не выполняется, почему?????

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
int main(int argc, char* argv[])
{
    setlocale( LC_ALL,"Russian" );
  Notebook note;
  int ch1,ch2,ch3; 
  start:   // Вывод меню 
  system("cls"); 
  cout << "\n\nВведите нужный номер пункта меню.";
  cout << "\n1. Создать запись";
  cout << "\n2. Удалить запись";
  cout << "\n3. Просмотреть все записи";
  cout << "\n4. Изменить номер телефона";
  cout << "\n5. Поиск";
  cout << "\n6. Сортировать ";
  cout << "\n7. Завершить программу";
  cout << "\n\nВведите номер: ";
  cin >> ch1;
  cout << "\n\n";
  switch(ch1)
  {
    case 1: system("cls");
      note.add();
      break;
    case 2: system("cls");
      note.deleted();
      break;
    case 3: system("cls");
      note.print();
      break;
    case 4: system("cls"); 
      note.changes_number();
      break;
    case 5: system("cls");
        cout << "\n1. по имени";
        cout << "\n2. по номеру телефона";
        cout << "\n3. по дате рождения";
        cout << "\nВведите номер пункта подменю: ";
        cin >> ch2;
        switch(ch2)
        {
          case 1: system("cls");
            note.search_by_name();
            break;
          case 2: system("cls");
            note.search_by_number();
            break;
          case 3: system("cls");
            note.search_by_date();
            break; 
        }
        cout << "\n\nХотите вернуться в меню ?(y/n)";
            if(_getch() == 'y') goto start;
    case 6: system("cls");
        cout << "\n1. по имени";
        cout << "\n2. по фамилии";
        cout << "\n3. по дате рождения";
        cout << "\nВведите номер пункта подменю: ";
        cin >> ch3;
        switch(ch3)
        {
          case 1: 
            note.sort_by_name();
            break;
          case 2: 
            note.sort_by_last_name();
            break;
          case 3: 
            note.sort_by_date();
            break; 
        }
    case 7: return 0; 
      break;
    default:
      cout << "\nТакого пункта меню нет.";  
  }
  cout << "\n\nХотите вернуться в меню ?(y/n)";
  if(_getch() == 'y') goto start;
  return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2011, 08:14
Ответы с готовыми решениями:

Не выполняется заданная ветвь в switch
когда запускаю задачу не делает случай 2,а точнее ф-цию deshe #include &lt;iostream&gt; #include...

Почему не выполняется второй switch?
У меня возник вопрос по switch'у. В коде содержится две структуры свитч. ...

При передаче рандомного значения в switch всегда выполняется один и тот же case
Добрый день! У меня возникла небольшая проблема в процессе написания части кода, в которой...

Switch . Как присвоить переменной значение из Switch в default
Добрый день подскажите как реализуется данный код . Как взять значение switch если выпал default ? ...

37
166 / 164 / 27
Регистрация: 20.04.2010
Сообщений: 607
01.12.2011, 08:21 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
case 6: system("cls");
            cout << "\n1. по имени";
                cout << "\n2. по фамилии";
                cout << "\n3. по дате рождения";
                cout << "\nВведите номер пункта подменю: ";
                cin >> ch3;
            switch(ch3)
                {
                  case 1: 
                    note.sort_by_name();
                        break;
                  case 2: 
            note.sort_by_last_name();
            break;
          case 3: 
            note.sort_by_date();
            break; 
                }
        case 7: return 0; 
          break;
ch3 = 3.
выполняетс note.sort_by_date();
затем по break вылетает из текущего(внутреннего) switch-a
попадаем во внешний список. break-a нет чтоб выйти из внешнего cwitch-а. и Начинает обрабатыватся case 7.

C++
1
2
        case 7: return 0; 
          break;
по ретерну программа выходит из функции и от break-a толка ни какого
0
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91
01.12.2011, 09:22  [ТС] 3
вообще не выполняет, после нажатия 1 (либо 2,3) сразу вылетает.допустим брейк убираем после саse 7, все равно вылетает.
А если сделать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
case 6: system("cls");
            cout << "\n1. по имени";
                cout << "\n2. по фамилии";
                cout << "\n3. по дате рождения";
                cout << "\nВведите номер пункта подменю: ";
                cin >> ch3;
            switch(ch3)
                {
                  case 1: 
                    note.sort_by_name();
                        break;
                  case 2: 
            note.sort_by_last_name();
            break;
          case 3: 
            note.sort_by_date();
            break; 
                }
        cout << "\n\nХотите вернуться в меню ?(y/n)";
            if(_getch() == 'y') goto start;
        case 7: return 0; 
          break;
то в саse 6 в цикл даж не заходит, а спрашивает Хотите вернуться в меню ?(y/n)
0
166 / 164 / 27
Регистрация: 20.04.2010
Сообщений: 607
01.12.2011, 09:43 4
сейчас попробую скомпилировать. дайте список хидеров. но то что я сказал это явный косяк.
0
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91
01.12.2011, 09:51  [ТС] 5
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <conio.h>
#include <fstream>
#include <vector>
#include <iomanip>
#include <cstdlib>
#include <algorithm>
#include <windows.h>
Добавлено через 4 минуты
я могу весь код выложить
0
166 / 164 / 27
Регистрация: 20.04.2010
Сообщений: 607
01.12.2011, 10:05 6
Вылетает в смысле из программы? Это норм. Вылетает из внутреннего свича и начинает отрабатывать case 7. Там уже и вылетает.

Исправьте как
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
case 6: system("cls");
            cout << "\n1. по имени";
                cout << "\n2. по фамилии";
                cout << "\n3. по дате рождения";
                cout << "\nВведите номер пункта подменю: ";
                cin >> ch3;
            switch(ch3)
                {
                  case 1: 
                    note.sort_by_name();
                        break;
                  case 2: 
            note.sort_by_last_name();
            break;
          case 3: 
            note.sort_by_date();
            break; 
                }
break;
        case 7: return 0;
0
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91
01.12.2011, 10:10  [ТС] 7
нажимаю пункт меню 1, выводится Хотите вернуться в меню ?(y/n),т.е. в цикл
C++
1
2
3
4
5
6
7
8
9
10
11
{
                  case 1: 
                    note.sort_by_name();
                        break;
                  case 2: 
            note.sort_by_last_name();
            break;
          case 3: 
            note.sort_by_date();
            break; 
                }
даже не заходит
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
01.12.2011, 10:20 8
C++
1
2
3
4
case '1':
  // ...
case '2':
  // ...
и т.д.
0
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91
01.12.2011, 10:24  [ТС] 9
без break??
0
166 / 164 / 27
Регистрация: 20.04.2010
Сообщений: 607
01.12.2011, 10:25 10
в дебаге посмотрите заходит ли во второй switch.
0
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91
01.12.2011, 10:44  [ТС] 11
так у меня int, зачем ' ',это же только для символов

Добавлено через 18 минут
переделала через do
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
int main(int argc, char* argv[])
{
    setlocale( LC_ALL,"Russian" );
  Notebook note;
  int ch1,ch2,ch3; 
  do   // Вывод меню 
  {
      ch1=0,ch2=0,ch3=0; 
  cout << "\n\nВведите нужный номер пункта меню.";
  cout << "\n1. Создать запись";
  cout << "\n2. Удалить запись";
  cout << "\n3. Просмотреть все записи";
  cout << "\n4. Изменить номер телефона";
  cout << "\n5. Поиск";
  cout << "\n6. Сортировать ";
  cout << "\n7. Завершить программу";
  cout << "\n\nВведите номер: ";
  ch1 = _getch();
  cout << "\n\n";
  switch(ch1)
  {
    case '1': system("cls");
      note.add();
      break;
    case '2': system("cls");
      note.deleted();
      break;
    case '3': system("cls");
      note.print();
      break;
    case '4': system("cls"); 
      note.changes_number();
      break;
    case '5': system("cls");
        cout << "\n1. по имени";
        cout << "\n2. по номеру телефона";
        cout << "\n3. по дате рождения";
        cout << "\nВведите номер пункта подменю: ";
        ch2 = _getch();
        switch(ch2)
        {
          case '1': system("cls");
            note.search_by_name();
            break;
          case '2': system("cls");
            note.search_by_number();
            break;
          case '3': system("cls");
            note.search_by_date();
            break; 
        }
    case '6': system("cls");
            cout << "\n1. по имени";
                cout << "\n2. по фамилии";
                cout << "\n3. по дате рождения";
                cout << "\nВведите номер пункта подменю: ";
                ch3 = _getch();
            switch(ch3)
                {
                  case '1': 
                    note.sort_by_name();
                        break;
                  case '2': 
            note.sort_by_last_name();
            break;
          case '3': 
            note.sort_by_date();
            break; 
                }
break;
        case '7': return 0; 
 
    default:
      cout << "\nТакого пункта меню нет.";  
  }
  }
  while(true);
  return 0;
}
в цикл
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
case '5': system("cls");
        cout << "\n1. по имени";
        cout << "\n2. по номеру телефона";
        cout << "\n3. по дате рождения";
        cout << "\nВведите номер пункта подменю: ";
        ch2 = _getch();
        switch(ch2)
        {
          case '1': system("cls");
            note.search_by_name();
            break;
          case '2': system("cls");
            note.search_by_number();
            break;
          case '3': system("cls");
            note.search_by_date();
            break; 
        }
заходит

а в цикл
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
case '6': system("cls");
            cout << "\n1. по имени";
                cout << "\n2. по фамилии";
                cout << "\n3. по дате рождения";
                cout << "\nВведите номер пункта подменю: ";
                ch3 = _getch();
            switch(ch3)
                {
                  case '1': 
                    note.sort_by_name();
                        break;
                  case '2': 
            note.sort_by_last_name();
            break;
          case '3': 
            note.sort_by_date();
            break; 
                }
break;
после выбора выходит в главное меню, т.е не заходит в switch(ch3).

почему????????????????
0
166 / 164 / 27
Регистрация: 20.04.2010
Сообщений: 607
01.12.2011, 10:51 12
у меня есть подозрение что у вас нет реализации методов класса, которые вы используете во втором свиче. В полне вероятно, что программа заходит в этот switсh,переходит в нужный case b сразу вылетает оттуда ибо не чего делать. Поменяйте все методы класса которые вы используете во втором свиче на функцию Sleep(1) и поставьте брик поинты около каждого слипа. И смотрите в дебаге. Просто я так проверял и у меня все зашло.
0
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91
01.12.2011, 11:02  [ТС] 13
а по подробнее про слипы и брик поинты?? я не понимаю((
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.12.2011, 11:08 14
irina3456, выровняй по оступам
во всех case'ах должны быть break'и, даже если оно там выходит
goto не должно быть вообще
что происходит, если ответ не равен 'y' ?
0
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91
01.12.2011, 11:22  [ТС] 15
если ответ не равен 'y' , то выходим из программы, а что тогда вместо goto???

Добавлено через 7 минут
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
int main(int argc, char* argv[])
{
    setlocale( LC_ALL,"Russian" );
  Notebook note;
  int ch1,ch2,ch3;
  start:   // Вывод меню 
  system("cls"); 
  cout << "\n\nВведите нужный номер пункта меню.";
  cout << "\n1. Создать запись";
  cout << "\n2. Удалить запись";
  cout << "\n3. Просмотреть все записи";
  cout << "\n4. Поиск";
  cout << "\n5. Сортировать ";
  cout << "\n6. Изменить номер";
  cout << "\n7. Завершить программу";
  cout << "\n\nВведите номер: ";
  cin >> ch1;
  cout << "\n\n";
  switch(ch1)
  {
    case 1: system("cls");
      note.add();
      break;
    case 2: system("cls");
      note.deleted();
      break;
    case 3: system("cls");
      note.print();
      break;
    case 4: system("cls");
        cout << "\n1. по имени";
        cout << "\n2. по номеру телефона";
        cout << "\n3. по дате рождения";
        cout << "\nВведите номер пункта подменю: ";
        cin >> ch2;
        switch(ch2)
        {
          case 1: system("cls");
            note.search_by_name();
            break;
          case 2: system("cls");
            note.search_by_number();
            break;
          case 3: system("cls");
            note.search_by_date();
            break; 
        }
        break;
    case 5: system("cls");
        cout << "\n1. по имени";
        cout << "\n2. по фамилии";
        cout << "\n3. по дате рождения";
        cout << "\nВведите номер пункта подменю: ";
        cin >> ch3;
        switch(ch3)
        {
          case 1: 
            note.sort_by_name();
            break;
          case 2: 
            note.sort_by_last_name();
            break;
          case 3: 
            note.sort_by_date();
            break;
        }
        break;
    case 6: note.changes_number();
      break;
    case 7: return 0;
          break;
    default:
      cout << "\nТакого пункта меню нет.";  
  }
  cout << "\n\nХотите вернуться в меню ?(y/n)";
  if(_getch() == 'y') goto start;
  return 0;
}

везде есть брейки, в case 5, после
cout << "\nВведите номер пункта подменю: ";
cin >> ch3;
в свич даже не заходит(((
а предлагает cout << "\n\nХотите вернуться в меню ?(y/n)";
0
166 / 164 / 27
Регистрация: 20.04.2010
Сообщений: 607
01.12.2011, 11:27 16
Цитата Сообщение от irina3456 Посмотреть сообщение
а что тогда вместо goto???
какой нить внешний безконечный цикл.
например
C++
1
2
3
4
5
6
bool exit = 0;
while(!exit)
{
cout << "\n\nХотите вернуться в меню ?(y/n)";
if(_getch() == 'n') exit = 1;
}
0
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91
01.12.2011, 12:03  [ТС] 17
при нажатии y выходит из прог...

Добавлено через 27 минут
мне просто необходимо 2ое подменю, пжлста, я не знаю что мне делать(( не работает 2ой цикл и все((
0
237 / 210 / 29
Регистрация: 08.06.2011
Сообщений: 467
01.12.2011, 12:10 18
попробуйте перед
C++
1
 cin >> ch3;
поставить
C++
1
cin.get();
0
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91
01.12.2011, 12:12  [ТС] 19
C++
1
cin.get();
не помогает
0
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91
01.12.2011, 13:03  [ТС] 20
Нажимаю 1, выводится :Хотите вернуться в меню ?

Добавлено через 48 минут
Цитата Сообщение от Aneron Посмотреть сообщение
у меня есть подозрение что у вас нет реализации методов класса, которые вы используете во втором свиче. В полне вероятно, что программа заходит в этот switсh,переходит в нужный case b сразу вылетает оттуда ибо не чего делать. Поменяйте все методы класса которые вы используете во втором свиче на функцию Sleep(1) и поставьте брик поинты около каждого слипа. И смотрите в дебаге. Просто я так проверял и у меня все зашло.
все равно во второй свич не заходит(((
0
01.12.2011, 13:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2011, 13:03
Помогаю со студенческими работами здесь

Как сделать чтобы Switch работал в другом Switch'e?
Как сделать что бы Switch работал в другом Switch'e? Вот допустим выбираем один пункт и в...

Рефакторинг switch внутри switch в static классе
Добрый день. Подскажите, как корректно обойти конструкцию switch case внутри switch case в...

Проект выполняется на Windows 8, но не выполняется на виртуальной машине
У меня есть проект, собранный в релиз, в котором осуществляется внедрение своей dll в память чужих...

Код не выполняется в одном месте, но выполняется в другом
Вот код процедуры: LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru