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

Объявление структуры в свитче

26.01.2017, 14:18. Показов 1420. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, имеется 3 заполненные структуры, с одинаковыми полями, но разными значениями в них.
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct a{
int t=5;
float b=1,3;
};
struct b{
int t=6;
float b=1,2;
};
struct c{
int t=7;
float b=1,1;
};
хочу сделать так, чтобы пользователь сам выбирал одну из них, вводя номер 1, 2 и 3 для a b и c соответственно.
И потом через switch объявлял рабочую переменную, типа выбранной структуры, например:
C++
1
2
3
4
5
6
7
8
9
switch (choice)
    {
    case 1: a f1;
        break;
    case 2: b f1;
        break;
    case 3: cf1;
        break;
    }
Но понял, что это объявление происходит внутри тела свитч, и программа дальше этого не видит, как из этого выкрутиться? Про классы читал, не сильно понял.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.01.2017, 14:18
Ответы с готовыми решениями:

Объявление структуры
Я объявляю структуру так: typedef struct { BYTE aaa; BYTE bbb; short ccc; int ddd; }ABC; Нашёл один пример, где...

Не понимаю объявление структуры
Разбираю это кусок кода struct TGAColor { union { struct { unsigned char b, g, r,...

Объявление структуры и класса
Ругается на строку obj_cls.prv=3; и на объявление класса. Что у меня не правильно? #include <iostream> using namespace std;...

12
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
26.01.2017, 15:03
Наверное как то так. Не знаю, может можно и проще
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
#include <iostream>
#include <stdexcept>
 
class a
{
    int t=5;
    float b=1.3;
    
    public:
        virtual float getT()
        {
            return t;
        }
        virtual float getB()
        {
            return b;
        }
        virtual ~a() = default;
};
class b : public a{
    int t=6;
    float b=1.2;
    
    public:
        virtual float getT()
        {
            return t;
        }
        virtual float getB()
        {
            return b;
        }
};
class c : public a{
    int t=7;
    float b=1.1;
    
    public:
        virtual float getT()
        {
            return t;
        }
        virtual float getB()
        {
            return b;
        }
};
 
int main()
{
   a *ptr = nullptr;
   
   
   int choice = 3;
   switch(choice)
   {
    case 1: ptr = new a;
        break;
    case 2: ptr = (new b);
        break;
    case 3: ptr = (new c);
        break;
    default:
       throw std::runtime_error("invalid case");
   }
    if (ptr) {
       std::cout << ptr->getB() << std::endl;
       std::cout << ptr->getT() << std::endl;
       delete ptr;
    }
}
http://rextester.com/FBFQ5007
1
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
26.01.2017, 15:16
Мы не ищем легких путей?
C++
1
2
3
    std::pair<int,double> a={1,2};
    std::pair<int,double> b={3,4};
    std::pair<int,double> c={5,6};
В свитче скопировать что и куда надо.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
26.01.2017, 15:20
Renji,
Да так проще. Просто там были именно структуры (ну я написал классы потому что есть методы, так более осмысленно нежели со структурами)
0
0 / 0 / 0
Регистрация: 10.03.2016
Сообщений: 11
26.01.2017, 15:21  [ТС]
sys_beginner, а можно прокомментировать строки? а то многое непонятно
0
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
26.01.2017, 15:24
Цитата Сообщение от Andy_Panda Посмотреть сообщение
Здравствуйте, имеется 3 заполненные структуры, с одинаковыми полями, но разными значениями в них.
А как задание звучит полностью? Для чего это делается?
0
0 / 0 / 0
Регистрация: 10.03.2016
Сообщений: 11
26.01.2017, 15:26  [ТС]
А какая поставлена задача?
там же дальше все написано.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.01.2017, 15:27
Я думаю, что в задаче требуется ассоциативный массив. Посмотрите в сторону std::unordered_map.

Цитата Сообщение от Andy_Panda Посмотреть сообщение
1,3
Числа с плавающей точкой пишутся через . У вас вообще код компилируется?

Добавлено через 24 секунды
Цитата Сообщение от Andy_Panda Посмотреть сообщение
там же дальше все написано.
Там написаны ваши соображения, а не общая задача.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
26.01.2017, 15:29
Цитата Сообщение от Andy_Panda Посмотреть сообщение
а можно прокомментировать строки? а то многое непонятно
Можно. Только задавайте конкретные вопросы а то я замучаюсь комментировать каждую строку
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.01.2017, 15:31
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <unordered_map>
 
int main()
{
    const std::unordered_map<int, double> um = {{5, 1.3}, {6, 1.2}, {7, 1.1}};
    int x;
    std::cin >> x;
    const auto it = um.find(x);
    if (it != um.end())
        std::cout << it->second << std::endl;
    else
        std::cout << "No such\n";
}
Добавлено через 49 секунд
И поиск за константу, как и у switch для данных значений.
0
0 / 0 / 0
Регистрация: 10.03.2016
Сообщений: 11
26.01.2017, 15:32  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
Я думаю, что в задаче требуется ассоциативный массив. Посмотрите в сторону std::unordered_map.
Сообщение от Andy_Panda
1,3
Числа с плавающей точкой пишутся через . У вас вообще код компилируется?
Добавлено через 24 секунды
Сообщение от Andy_Panda
там же дальше все написано.
Там написаны ваши соображения, а не общая задача.
да, я знаю как они пишутся, просто тут описался, тут приведена упрощенная часть задачки, которую я не знаю как реализовать, задача состоит именно в том чтобы объявлять переменные в свитче.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.01.2017, 15:34
Цитата Сообщение от Andy_Panda Посмотреть сообщение
задача состоит именно в том чтобы объявлять переменные в свитче.
Для чего?
В С++ действует общее правило, что область видимости переменной ограничена фигурными скобками.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.01.2017, 21:49
Если я правильно понял вопрос, то нужно что-то типа такого (или какой-нибудь производный вариант):

C
struct s
{
  int t;
  float b;
};
 
struct s result;
 
switch (choice)
{
  static struct s a = { 5, 1.3 };
  static struct s b = { 6, 1.2 };
  static struct s c = { 7, 1.1 };
 
  case 1: result = a; break;
  case 2: result = b; break;
  case 3: result = c; break;
}
Добавлено через 1 минуту
Хотя нет. Там вроде бы должны быть разные типы. Но что должно быть в качестве результата, внятно не описано
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.01.2017, 21:49
Помогаю со студенческими работами здесь

Объявление и создание глобальной структуры в dll
объявление я сделал в .h файле но так как структуру нужно создать то вопрос в каком файле это делать и где(проект win32, Visual studio...

Объявление стека как члена структуры
Добрый день. Пытаюсь объявить структуру, содержащую стэк struct labirint { int A; int starta, startb; ...

Объявление и определение глобального массива структуры
Есть структура struct DatSob { int year; // Год события int month; // Месяц события int day; // день события...

Объявление указателя на структуру в объявлении структуры
struct node { int data; struct node * next; }; Зачем может понадобится такое объявление?

Как обратиться к полям структуры через указатель и объявление указателя на структуру
Как обратиться к полям структуры через указатель и объявление указателя на структуру? #include &quot;stdAfx.h&quot; #include...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru