Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/104: Рейтинг темы: голосов - 104, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 14

Switch case внутри switch case

10.05.2015, 18:07. Показов 22525. Ответов 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)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
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, там ввод массива автоматически , в чем ошибка подскажите Ошибку пишет Case bypasses initialization of a...

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

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

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

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

Решение

Убери break; из 32-й строки.
2
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 14
12.05.2015, 16:55  [ТС]
castaway, ох уж моя невнимательность.
Спасибо огромное!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2015, 16:55
Помогаю со студенческими работами здесь

Switch case
Как с помощью switch case сделать так чтобы программа выдавала YES при значении 0-2018? &gt;&lt; и &amp;&amp; Вроде не работает

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru