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

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

Войти
Регистрация
Восстановить пароль
 
Andy_Panda
0 / 0 / 0
Регистрация: 10.03.2016
Сообщений: 9
#1

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

26.01.2017, 14:18. Просмотров 260. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2017, 14:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объявление структуры в свитче (C++):

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

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

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

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

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

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

12
Undisputed
163 / 94 / 19
Регистрация: 10.06.2014
Сообщений: 1,353
Завершенные тесты: 3
26.01.2017, 15:03 #2
Наверное как то так. Не знаю, может можно и проще
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
0
Renji
2000 / 1368 / 308
Регистрация: 05.06.2014
Сообщений: 3,901
26.01.2017, 15:16 #3
Мы не ищем легких путей?
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
Undisputed
163 / 94 / 19
Регистрация: 10.06.2014
Сообщений: 1,353
Завершенные тесты: 3
26.01.2017, 15:20 #4
Renji,
Да так проще. Просто там были именно структуры (ну я написал классы потому что есть методы, так более осмысленно нежели со структурами)
0
Andy_Panda
0 / 0 / 0
Регистрация: 10.03.2016
Сообщений: 9
26.01.2017, 15:21  [ТС] #5
sys_beginner, а можно прокомментировать строки? а то многое непонятно
0
Nemovok
237 / 84 / 34
Регистрация: 30.10.2015
Сообщений: 521
Завершенные тесты: 1
26.01.2017, 15:24 #6
Цитата Сообщение от Andy_Panda Посмотреть сообщение
Здравствуйте, имеется 3 заполненные структуры, с одинаковыми полями, но разными значениями в них.
А как задание звучит полностью? Для чего это делается?
0
Andy_Panda
0 / 0 / 0
Регистрация: 10.03.2016
Сообщений: 9
26.01.2017, 15:26  [ТС] #7
А какая поставлена задача?
там же дальше все написано.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7491 / 4606 / 692
Регистрация: 29.11.2010
Сообщений: 12,596
26.01.2017, 15:27 #8
Я думаю, что в задаче требуется ассоциативный массив. Посмотрите в сторону std::unordered_map.

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

Добавлено через 24 секунды
Цитата Сообщение от Andy_Panda Посмотреть сообщение
там же дальше все написано.
Там написаны ваши соображения, а не общая задача.
0
Undisputed
163 / 94 / 19
Регистрация: 10.06.2014
Сообщений: 1,353
Завершенные тесты: 3
26.01.2017, 15:29 #9
Цитата Сообщение от Andy_Panda Посмотреть сообщение
а можно прокомментировать строки? а то многое непонятно
Можно. Только задавайте конкретные вопросы а то я замучаюсь комментировать каждую строку
0
MrGluck
Модератор
Эксперт CЭксперт С++
7491 / 4606 / 692
Регистрация: 29.11.2010
Сообщений: 12,596
26.01.2017, 15:31 #10
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
Andy_Panda
0 / 0 / 0
Регистрация: 10.03.2016
Сообщений: 9
26.01.2017, 15:32  [ТС] #11
Цитата Сообщение от MrGluck Посмотреть сообщение
Я думаю, что в задаче требуется ассоциативный массив. Посмотрите в сторону std::unordered_map.
Сообщение от Andy_Panda
1,3
Числа с плавающей точкой пишутся через . У вас вообще код компилируется?
Добавлено через 24 секунды
Сообщение от Andy_Panda
там же дальше все написано.
Там написаны ваши соображения, а не общая задача.
да, я знаю как они пишутся, просто тут описался, тут приведена упрощенная часть задачки, которую я не знаю как реализовать, задача состоит именно в том чтобы объявлять переменные в свитче.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7491 / 4606 / 692
Регистрация: 29.11.2010
Сообщений: 12,596
26.01.2017, 15:34 #12
Цитата Сообщение от Andy_Panda Посмотреть сообщение
задача состоит именно в том чтобы объявлять переменные в свитче.
Для чего?
В С++ действует общее правило, что область видимости переменной ограничена фигурными скобками.
0
Evg
Эксперт CАвтор FAQ
18253 / 6378 / 438
Регистрация: 30.03.2009
Сообщений: 17,656
Записей в блоге: 28
26.01.2017, 21:49 #13
Если я правильно понял вопрос, то нужно что-то типа такого (или какой-нибудь производный вариант):

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
26.01.2017, 21:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2017, 21:49
Привет! Вот еще темы с ответами:

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

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

Помещение структуры в вектор, удаление структуры, изменение элементов структуры - C++
Здравствуйте. Помогите разобраться с тем, как: 1 - находить элементы в векторе зная уникальный элемент структуры. 2 - удалять...

Динамические структуры данных. Программа ввода в структуры и вывода информации из неё. - C++
Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего следования. Для...


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

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

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