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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
irina3456
1 / 1 / 0
Регистрация: 23.05.2011
Сообщений: 91
#1

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

01.12.2011, 08:14. Просмотров 1774. Ответов 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 - C++
когда запускаю задачу не делает случай 2,а точнее ф-цию deshe #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt; #include...

Код не выполняется в одном месте, но выполняется в другом - C++
Вот код процедуры: LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; ...

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

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

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

switch - C++
switch(user_selection){ case 1: mainMenu.switchMenu(user_selection); break; case 2: mainMenu.switchMenu(user_selection); break; case...

37
Aneron
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 570
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 / 0
Регистрация: 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
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 570
01.12.2011, 09:43 #4
сейчас попробую скомпилировать. дайте список хидеров. но то что я сказал это явный косяк.
0
irina3456
1 / 1 / 0
Регистрация: 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
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 570
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 / 0
Регистрация: 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
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
01.12.2011, 10:20 #8
C++
1
2
3
4
case '1':
  // ...
case '2':
  // ...
и т.д.
0
irina3456
1 / 1 / 0
Регистрация: 23.05.2011
Сообщений: 91
01.12.2011, 10:24  [ТС] #9
без break??
0
Aneron
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 570
01.12.2011, 10:25 #10
в дебаге посмотрите заходит ли во второй switch.
0
irina3456
1 / 1 / 0
Регистрация: 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
158 / 157 / 12
Регистрация: 20.04.2010
Сообщений: 570
01.12.2011, 10:51 #12
у меня есть подозрение что у вас нет реализации методов класса, которые вы используете во втором свиче. В полне вероятно, что программа заходит в этот switсh,переходит в нужный case b сразу вылетает оттуда ибо не чего делать. Поменяйте все методы класса которые вы используете во втором свиче на функцию Sleep(1) и поставьте брик поинты около каждого слипа. И смотрите в дебаге. Просто я так проверял и у меня все зашло.
0
irina3456
1 / 1 / 0
Регистрация: 23.05.2011
Сообщений: 91
01.12.2011, 11:02  [ТС] #13
а по подробнее про слипы и брик поинты?? я не понимаю((
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
01.12.2011, 11:08 #14
irina3456, выровняй по оступам
во всех case'ах должны быть break'и, даже если оно там выходит
goto не должно быть вообще
что происходит, если ответ не равен 'y' ?
0
irina3456
1 / 1 / 0
Регистрация: 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
01.12.2011, 11:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2011, 11:22
Привет! Вот еще темы с ответами:

switch - C++
switch (k) { case 1 : printf(rus(&quot;Выход\n&quot;)); break; case 2 : printf(rus(&quot;Загрузить\n&quot;)); break; case 3 :...

if в switch - C++
Всем доброе время суток!!! Сразу прошу прощения за возможное существование похожей темы, со схожей сутью вопроса. google мне не в...

Switch - C++
Ошибка в 19 строке: n cannot appear in a constant-expression (потому что n это переменная?). #include &lt;iostream&gt; #include &lt;math.h&gt; ...

Switch - C++
Простите за глупый вопрос, но можно ли в switch работать с действительными числами и если да то как?


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

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

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