Форум программистов, компьютерный форум CyberForum.ru

Типы данных - C++

Восстановить пароль Регистрация
 
LORDIFF
0 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 3
03.06.2011, 12:57     Типы данных #1
Помогите пожалуйста решить проблему с типами данных.
C++ только начинаю учить, поэтому не знаю, можно ли так сделать или нет.
Нужно создать переменную с типом, которую выбрали с консоли.
Вот мои попытки:

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
wcout << L"Выберите тип данных: " << endl;
cout << "1 - int" << endl;
cout << "2 - double" << endl;
cout << "3 - float" << endl;
cout << "4 - char" << endl;
cout << "5 - bool" << endl;
int type;
cin >> type;
if(type > 5 || type < 1) {
    string error = "Error in choosing type of variable!";
    throw error;
}
switch(type){
    case 1:
        int variable;
        break;
    case 2:
        double variable;
        break;
    case 3:
        float variable;
        break;
    case 4:
        char variable;
        break;
    case 5:
        bool variable;
        break;
}
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
wcout << L"Выберите тип данных: " << endl;
cout << "1 - int" << endl;
cout << "2 - double" << endl;
cout << "3 - float" << endl;
cout << "4 - char" << endl;
cout << "5 - bool" << endl;
int type;
cin >> type;
if(type > 5 || type < 1) {
    string error = "Error in choosing type of variable!";
    throw error;
}
int variable;
switch(type){
    case 2:
        variable = reinterpret_cast<double> (variable);
        break;
    case 3:
        variable = reinterpret_cast<float> (variable);
        break;
    case 4:
        variable = reinterpret_cast<char> (variable);
        break;
    case 5:
        variable = reinterpret_cast<bool> (variable);
        break;
}
Как вы наверно понимаете, ничего не работает, помогите пожалуйста написать нормальный код.
Буду благодарен за любые подсказки

Добавлено через 12 часов 6 минут
Помогите пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2011, 12:57     Типы данных
Посмотрите здесь:

C++ Типы данных
Типы данных C++ C++
типы данных C++
типы данных C++
Типы данных C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
03.06.2011, 13:01     Типы данных #2
В С/С++ это не возможно. Эти языки не поддерживают динамическое создание типов в принципе. Даже и не пытайтесь.
Единственный известный мне язык - это Smalltalk.
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
03.06.2011, 13:03     Типы данных #3
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
int main()
{
    wcout << L"Выберите тип данных: " << endl;
    cout << "1 - int" << endl;
    cout << "2 - double" << endl;
    cout << "3 - float" << endl;
    cout << "4 - char" << endl;
    cout << "5 - bool" << endl;
    int type;
    cin >> type;
    if(type > 5 || type < 1) {
        string error = "Error in choosing type of variable!";
        throw error;
    }
    int variable = 0;
    switch(type){
        case 2:
            variable = static_cast<double> (variable);
            break;
        case 3:
            variable = static_cast<float> (variable);
            break;
        case 4:
            variable = static_cast<char> (variable);
            break;
        case 5:
            variable = static_cast<bool> (variable);
            break;
    } 
 
    wcout << variable;
}
работает. для variable лучше выбрать double
prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
03.06.2011, 13:13     Типы данных #4
pito211, У меня ваша программа не работает.
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
03.06.2011, 13:39     Типы данных #5
а у меня работает, с чего бы она не работала?
prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
03.06.2011, 14:30     Типы данных #6
pito211, смотрите
C++
1
2
3
4
5
6
//...
variable = 1.2;
 
wcout << variable;
}
//...
и результат:
Типы данных
Хорошенький у нас int вышел?
variable в этом случае вообще бестиповой получается. Прямо как в Бейсике
Можно, конечно, шаблоны подключить, но это - право, извращение...
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
03.06.2011, 14:44     Типы данных #7
а что собственно не так? variable по прежнему имеет тип double или float как ты и объявил изначально.
variable = 1.2;
ты написал очевидно после switch, поэтому он и вывел то что вывел. Всё правильно, все довольны

Добавлено через 2 минуты
если написать это до свитча то он соответсвенно выведет 1
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
03.06.2011, 14:48     Типы данных #8
http://www.boost.org/doc/libs/1_46_1...l/any/s02.html
prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
03.06.2011, 15:00     Типы данных #9
pito211, Так, уважаемый(-ая), вся работа с переменными идет после преобразования (в нашем случае блок switch), если работать с переменной до преобразования, то на фиг это преобразование вообще нужно? В данном случае я имею ввиду конкретно тип int.


fasked, Про шаблоны я писал выше.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,135
Записей в блоге: 26
03.06.2011, 15:02     Типы данных #10
Цитата Сообщение от LORDIFF Посмотреть сообщение
Нужно создать переменную с типом, которую выбрали с консоли
Так ты и создал переменные

Цитата Сообщение от LORDIFF Посмотреть сообщение
Как вы наверно понимаете, ничего не работает
А что в твоём понимании должно произойти (или напечататься), чтобы можно было сказать, что оно работает. Другими словами, в чём конкретно заключается смысл задания?
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
03.06.2011, 15:08     Типы данных #11
C++
1
2
3
[quote=prZzZ;1721364]variable = 1.2;
wcout << variable;
}[/quote]
а что ты хотел увидеть, кроме 1.2? variable имеет тип double, ты присвоил ей 1.2, он вывел 1.2. Логично
prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
03.06.2011, 15:11     Типы данных #12
pito211, Я хотел увидеть runtime error
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
03.06.2011, 15:18     Типы данных #13
код абсолютно безопасный, даже если variable будет типа bool, тогда просто при приобразованиях возможны потери. Но run_time не вылезет
prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
03.06.2011, 15:27     Типы данных #14
pito211, Так вот и хреново, если не вылезет, потому что при запросе типа я выбираю 1 (тип int), а потом (в каком-то месте программы, скажем далеко-далеко) присваиваю ему значение 1.2 и программа это с лёгкостью проглатывает. Как дальше пойдет работа с этим значением (int i = 1.2) одному богу известно. Как вы думаете?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,135
Записей в блоге: 26
03.06.2011, 15:28     Типы данных #15
Цитата Сообщение от prZzZ Посмотреть сообщение
Как дальше пойдет работа с этим значением (int i = 1.2) одному богу известно. Как вы думаете?
"А чего тут думать? Трясти надо!" (с)
Другими словами, об этом за тебя уже подумали много лет назад и всё в стандарте языка написали
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2011, 15:37     Типы данных
Еще ссылки по теме:

Типы данных: есть ли универсальный тип, который может заменить все типы данных в Си? C++
C++ Типы данных
C++ Типы данных

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

Или воспользуйтесь поиском по форуму:
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
03.06.2011, 15:37     Типы данных #16
Цитата Сообщение от prZzZ Посмотреть сообщение
Так вот и хреново, если не вылезет, потому что при запросе типа я выбираю 1 (тип int), а потом (в каком-то месте программы, скажем далеко-далеко) присваиваю ему значение 1.2 и программа это с лёгкостью проглатывает. Как дальше пойдет работа с этим значением (int i = 1.2) одному богу известно. Как вы думаете?
я уже запутался какого типа ты объявил variable, если дабл, то здесь нет ничего криминального в строчке variable = 1.2.

В строке
Цитата Сообщение от LORDIFF Посмотреть сообщение
variable = static_cast<int> (variable);
он затолкает variable в стек сопроцессора, вызовет функцию которая чё то там преобразует, достанет из стека то что получилось и запихает в variable. Сущность variable как была даблом так и осталась даблом. Поэтому variable = 1.2 вполне валидно.
А если изначально variable ты как инт объявил, то variable = 1.2 пройзойдёт неявное преобразование или как там это по научному называется и variable присвоится 1. Нет тут никакого run_time error
Yandex
Объявления
03.06.2011, 15:37     Типы данных
Ответ Создать тему
Опции темы

Текущее время: 21:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru