0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 14
1

Switch case внутри switch case

10.05.2015, 18:07. Показов 15636. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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 сделать так чтобы программа выдавала YES при значении 0-2018? >< и &&...

16
Модератор
Эксперт по электронике
8729 / 6522 / 884
Регистрация: 14.02.2011
Сообщений: 22,831
10.05.2015, 18:30 2
Цитата Сообщение от klpff Посмотреть сообщение
Можно ли в уже имеющийся switch case засунуть еще один switch case?
можно
Цитата Сообщение от klpff Посмотреть сообщение
Если да, то можно рабочий пример?
доведи свой пример до ума и будет тебе рабочий пример
по крайней мере я большого криминала не вижу
только с бряками разберись

Добавлено через 20 минут
еще что хотелось бы добавить
с таким подходом ты запутаешься в собственном коде
открой для себя функции
1
Заблокирован
10.05.2015, 18:44 3
Цитата Сообщение от klpff Посмотреть сообщение
О рабзработчике
А почему он "раб"? Так всё плохо?
0
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 14
10.05.2015, 19:30  [ТС] 4
быстро писал, не заметил ошибку
0
Форумчанин
Эксперт CЭксперт С++
8191 / 5041 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
10.05.2015, 22:49 5
Вытащить вложенный switch-case в отдельную функцию и вызывать её. Так и разобраться проще в коде будет и отлаживать легче.
0
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 14
11.05.2015, 02:02  [ТС] 6
Цитата Сообщение от MrGluck Посмотреть сообщение
Вытащить вложенный switch-case в отдельную функцию и вызывать её. Так и разобраться проще в коде будет и отлаживать легче.
MrGluck, Не могли бы набросать примерный код вызова отдельной функции? Был бы очень благодарен)
0
Форумчанин
Эксперт CЭксперт С++
8191 / 5041 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.05.2015, 13:20 7
Цитата Сообщение от klpff Посмотреть сообщение
Не могли бы набросать примерный код вызова отдельной функции?
Структуры. Найти самого старшего мужчину
Смотрите на метод Program::run.
0
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 14
12.05.2015, 14:26  [ТС] 8
MrGluck, для меня сложно там что-то понять
Но все равно спасибо.
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
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
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 14
12.05.2015, 16:23  [ТС] 10
castaway, видел подобный пример, однако, мне не помогло. Не работает все равно.
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
12.05.2015, 16:28 11
Ты спросил:
Цитата Сообщение от klpff Посмотреть сообщение
Можно ли в уже имеющийся switch case засунуть еще один switch case?
Можно.

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

Цитата Сообщение от klpff Посмотреть сообщение
Не работает все равно.
Что я сейчас должен тебе ответить?
0
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 14
12.05.2015, 16:30  [ТС] 12
castaway, посмотри мой код, там все так?
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
12.05.2015, 16:36 13
Это не код, это херня какая-то. Там нечего смотреть.
0
Форумчанин
Эксперт CЭксперт С++
8191 / 5041 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
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
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
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
12.05.2015, 16:49 16
Лучший ответ Сообщение было отмечено klpff как решение

Решение

Убери break; из 32-й строки.
1
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 14
12.05.2015, 16:55  [ТС] 17
castaway, ох уж моя невнимательность.
Спасибо огромное!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2015, 16:55
Помогаю со студенческими работами здесь

Switch - Case
Составить программу, определяющую результат гадания на ромашке («любит–не любит– плюнет–поцелует–к...

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

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

Switch - case
Обязательно с использованием классов Есть задача. Дан массив вещественных чисел. а) Ко всем...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru