Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
irina3456
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91
#1

не выполняется switch - C++

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

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

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2011, 08:14
Я подобрал для вас темы с готовыми решениями и ответами на вопрос не выполняется switch (C++):

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

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

Оптимальная конструкция switch-case-while / while-switch-case
Имеется конструкция типа: switch() { case 1: while() { ... }

Switch case внутри switch case
Привет всем! Нужна помощь. Пишу калькулятор с консольным меню. Так вот,...

While{switch{switch{break;}}} break выходит из while
В общем необходимо конструкцию switch запускать в цикле, в каждом case X: стоит...

Switch
Определить порядковый номер того дня високосного года, который имеет заданую...

37
Aneron
159 / 158 / 25
Регистрация: 20.04.2010
Сообщений: 576
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
irina3456
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
Aneron
159 / 158 / 25
Регистрация: 20.04.2010
Сообщений: 576
01.12.2011, 09:43 #4
сейчас попробую скомпилировать. дайте список хидеров. но то что я сказал это явный косяк.
0
irina3456
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
Aneron
159 / 158 / 25
Регистрация: 20.04.2010
Сообщений: 576
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
irina3456
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
Nameless One
Эксперт С++
5785 / 3434 / 351
Регистрация: 08.02.2010
Сообщений: 7,448
01.12.2011, 10:20 #8
C++
1
2
3
4
case '1':
  // ...
case '2':
  // ...
и т.д.
0
irina3456
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91
01.12.2011, 10:24  [ТС] #9
без break??
0
Aneron
159 / 158 / 25
Регистрация: 20.04.2010
Сообщений: 576
01.12.2011, 10:25 #10
в дебаге посмотрите заходит ли во второй switch.
0
irina3456
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
Aneron
159 / 158 / 25
Регистрация: 20.04.2010
Сообщений: 576
01.12.2011, 10:51 #12
у меня есть подозрение что у вас нет реализации методов класса, которые вы используете во втором свиче. В полне вероятно, что программа заходит в этот switсh,переходит в нужный case b сразу вылетает оттуда ибо не чего делать. Поменяйте все методы класса которые вы используете во втором свиче на функцию Sleep(1) и поставьте брик поинты около каждого слипа. И смотрите в дебаге. Просто я так проверял и у меня все зашло.
0
irina3456
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91
01.12.2011, 11:02  [ТС] #13
а по подробнее про слипы и брик поинты?? я не понимаю((
0
accept
4833 / 3254 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
01.12.2011, 11:08 #14
irina3456, выровняй по оступам
во всех case'ах должны быть break'и, даже если оно там выходит
goto не должно быть вообще
что происходит, если ответ не равен 'y' ?
0
irina3456
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
Aneron
159 / 158 / 25
Регистрация: 20.04.2010
Сообщений: 576
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
irina3456
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91
01.12.2011, 12:03  [ТС] #17
при нажатии y выходит из прог...

Добавлено через 27 минут
мне просто необходимо 2ое подменю, пжлста, я не знаю что мне делать(( не работает 2ой цикл и все((
0
Net_Wanderer
235 / 208 / 29
Регистрация: 08.06.2011
Сообщений: 467
01.12.2011, 12:10 #18
попробуйте перед
C++
1
 cin >> ch3;
поставить
C++
1
cin.get();
0
irina3456
1 / 1 / 2
Регистрация: 23.05.2011
Сообщений: 91
01.12.2011, 12:12  [ТС] #19
C++
1
cin.get();
не помогает
0
irina3456
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2011, 13:03
Привет! Вот еще темы с решениями:

switch
5. как пользоваться switch()

Switch
Ошибка в 19 строке: n cannot appear in a constant-expression (потому что n это...

switch
Помогите!!

if в switch
Всем доброе время суток!!! Сразу прошу прощения за возможное существование...


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

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

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