Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
klpff
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 14
1

Switch case внутри switch case

10.05.2015, 18:07. Просмотров 3296. Ответов 16
Метки нет (Все метки)

Привет всем!
Нужна помощь.
Пишу калькулятор с консольным меню.
Так вот, используется цикл while, внутри которого у меня switch case. Можно ли в уже имеющийся switch case засунуть еще один switch case? Если да, то можно рабочий пример? Был бы очень благодарен.
Вот типа такого:
P.S. Извеняйте, если вопрос глупый, учусь
C++
1
2
3
    printf ("1.Калькулятор\n");
    printf ("2.Помощь в работе с программой\n");
    printf ("3.О рабзработчике\n");
и т.д..............
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    while(1)
    {
    scanf_s ("%i", &deystvie);
    switch (deystvie)
      {
        case 1 : printf("-----Калькулятор-----\n ");
                 printf("Выберите нужное действие:\n ");
                 printf("1.Сложение\n ");
                 printf("2.Вычитание\n ");
                и т.д...........
                 scanf_s ("%i", &deystvie2);
                 switch(deystvie2)
                 {
                 case 1:  printf("-------Сложение-------");
                         и т.д...............
                 }
        case 2 : printf("test.\n ");break;
        case 3 : printf("test.\n ");break;
        default: printf("Выбрано неверное действие.\n");break;
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2015, 18:07
Ответы с готовыми решениями:

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

switch-case, как писать в самом case
Такс дело вот в чём,прога работает всё хорошо,вот только мне не нравится как...

Внутри switch ошибка Case bypasses initialization of a local variable
Компилятор не устраивает case 3, там ввод массива автоматически , в чем ошибка...

switch case
как в блок-схеме изображается switch case?

Switch + case
Суть задания: Задан шифр книги из библиотеки в виде шестизначного ...

16
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,944
10.05.2015, 18:30 2
Цитата Сообщение от klpff Посмотреть сообщение
Можно ли в уже имеющийся switch case засунуть еще один switch case?
можно
Цитата Сообщение от klpff Посмотреть сообщение
Если да, то можно рабочий пример?
доведи свой пример до ума и будет тебе рабочий пример
по крайней мере я большого криминала не вижу
только с бряками разберись

Добавлено через 20 минут
еще что хотелось бы добавить
с таким подходом ты запутаешься в собственном коде
открой для себя функции
1
IrineK
Заблокирован
10.05.2015, 18:44 3
Цитата Сообщение от klpff Посмотреть сообщение
О рабзработчике
А почему он "раб"? Так всё плохо?
0
klpff
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 14
10.05.2015, 19:30  [ТС] 4
быстро писал, не заметил ошибку
0
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4957 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
10.05.2015, 22:49 5
Вытащить вложенный switch-case в отдельную функцию и вызывать её. Так и разобраться проще в коде будет и отлаживать легче.
0
klpff
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 14
11.05.2015, 02:02  [ТС] 6
Цитата Сообщение от MrGluck Посмотреть сообщение
Вытащить вложенный switch-case в отдельную функцию и вызывать её. Так и разобраться проще в коде будет и отлаживать легче.
MrGluck, Не могли бы набросать примерный код вызова отдельной функции? Был бы очень благодарен)
0
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4957 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
11.05.2015, 13:20 7
Цитата Сообщение от klpff Посмотреть сообщение
Не могли бы набросать примерный код вызова отдельной функции?
Структуры. Найти самого старшего мужчину
Смотрите на метод Program::run.
0
klpff
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 14
12.05.2015, 14:26  [ТС] 8
MrGluck, для меня сложно там что-то понять
Но все равно спасибо.
0
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
12.05.2015, 16:20 9
Тут нет ничего сложного.
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
#include <iostream>
 
int main() {
    int i = 2;
    int j = 10;
 
    switch ( i ) {
        case 1:
            std::cout << 1 << std::endl;
            break;
 
        case 2:
            switch ( j ) {
                case 10:
                    std::cout << 10 << std::endl;
                    break;
 
                case 20:
                    std::cout << 20 << std::endl;
                    break;
 
                case 30:
                    std::cout << 30 << std::endl;
                    break;
            }
            break;
 
        case 3:
            std::cout << 3 << std::endl;
            break;
    }
}
0
klpff
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 14
12.05.2015, 16:23  [ТС] 10
castaway, видел подобный пример, однако, мне не помогло. Не работает все равно.
0
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
12.05.2015, 16:28 11
Ты спросил:
Цитата Сообщение от klpff Посмотреть сообщение
Можно ли в уже имеющийся switch case засунуть еще один switch case?
Можно.

Цитата Сообщение от klpff Посмотреть сообщение
Если да, то можно рабочий пример?
Мой пример рабочий.

Цитата Сообщение от klpff Посмотреть сообщение
Не работает все равно.
Что я сейчас должен тебе ответить?
0
klpff
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 14
12.05.2015, 16:30  [ТС] 12
castaway, посмотри мой код, там все так?
0
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
12.05.2015, 16:36 13
Это не код, это херня какая-то. Там нечего смотреть.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4957 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
12.05.2015, 16:39 14
klpff, тот же пример, но с выделением внутреннего switch в функцию:
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
#include <iostream>
 
void foo(const int j) {
    switch ( j ) {
        case 10:
            std::cout << 10 << std::endl;
            break;
 
        case 20:
            std::cout << 20 << std::endl;
            break;
 
        case 30:
            std::cout << 30 << std::endl;
            break;
    }
}
 
int main() {
    int i = 2;
    int j = 10;
 
    switch ( i ) {
        case 1:
            std::cout << 1 << std::endl;
            break;
 
        case 2:
            foo(j);
            break;
 
        case 3:
            std::cout << 3 << std::endl;
            break;
    }
}
0
klpff
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 14
12.05.2015, 16:41  [ТС] 15
castaway,
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
#include <stdio.h>
#include <conio.h>
#include <clocale>
int main()
{   setlocale (LC_ALL,"Russian");
    setlocale (LC_ALL,"rus");
 
    int deystvie;
    int deystvie2;
    double a, b, c, ans;
    printf ("----------Меню----------: \n");
    printf ("1.Калькулятор.\n");
    printf ("2.Помощь в работе с программой.\n");
    printf ("3.О разработчике.\n");
    printf ("Выберите действие:\n ");
    while(1)
    {
    scanf("%i",&deystvie);
    switch (deystvie)
      {
        case 1 : printf("-----Калькулятор-----\n ");
                 printf("Выберите нужное действие:\n ");
                 printf("1.Сложение.\n ");
                 printf("2.Вычитание.\n ");
                 printf("3.Умножение.\n ");
                 printf("4.Деление.\n ");
                 printf("5.Возведение в степень.\n ");
                 printf("6.Вычисление квадратного корня.\n ");
                 printf("7.Вычисление синуса.\n ");
                 printf("8.Вычисление косинуса.\n ");
                 printf("9.Вычисление тангенса.\n ");
                 printf("10.Вычисление натурального логарифма.\n ");break;
                 scanf("%i",&deystvie2);
                 switch(deystvie2)
                 {
                 case 1: printf("-------Сложение-------");
                         printf("Введите первое слагаемое:\n");
                         scanf("%d",&a);
                         printf("Введите второе слагаемое:\n");
                         scanf("%d",&b);break;
                         default:printf("Ошибка!");  
                 }
        case 2 : printf("help.\n ");break;
        case 3 : printf("О разработчике:\n ");break;
        default: printf("Выбрано неверное действие.\n");break;
       }
    }
    getch();
    return 0;
}
Кейсы все в незаконченном варианте, если что.
0
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
12.05.2015, 16:49 16
Лучший ответ Сообщение было отмечено klpff как решение

Решение

Убери break; из 32-й строки.
1
klpff
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 14
12.05.2015, 16:55  [ТС] 17
castaway, ох уж моя невнимательность.
Спасибо огромное!!
0
12.05.2015, 16:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2015, 16:55

switch i case
v 4jom u menja o6ibka? i kak vivisti rezultat? # include &lt;iostream&gt; #...

Switch - case
Доброго времени суток. Сделал меню по такой схеме: switch(a) { case 1: ...

switch и case
Пишет, что switch не содержит case, но судя по коду - это не так... как же...


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

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

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