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

Типы данных

03.06.2011, 12:57. Показов 1112. Ответов 15
Метки нет (Все метки)

Помогите пожалуйста решить проблему с типами данных.
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 минут
Помогите пожалуйста!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2011, 12:57
Ответы с готовыми решениями:

Типы данных: есть ли универсальный тип, который может заменить все типы данных в Си?
Добрый вечер! Был бы очень признателен, если бы Вы помогли бы мне понять нижеследующие вопросы:...

Типы данных: чем отличается тип данных int от float?
Всем привет! Помогите пожалуйста, чем отличается тип данных int от float?

Чтение недопустимых данных, динамические массивы, типы данных
Добрый день, реализую метод интерполяции сплайнами на С++, при подсчете одного из коэффициентов...

Типы данных в С++
Здравствуйте, Позвольте задать несколько наверное простых вопросов, в которых что то запутался:...

15
Программист
119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
03.06.2011, 13:01 2
В С/С++ это не возможно. Эти языки не поддерживают динамическое создание типов в принципе. Даже и не пытайтесь.
Единственный известный мне язык - это Smalltalk.
0
186 / 173 / 18
Регистрация: 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
0
Программист
119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
03.06.2011, 13:13 4
pito211, У меня ваша программа не работает.
0
186 / 173 / 18
Регистрация: 22.03.2010
Сообщений: 612
03.06.2011, 13:39 5
а у меня работает, с чего бы она не работала?
0
Программист
119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
03.06.2011, 14:30 6
pito211, смотрите
C++
1
2
3
4
5
6
//...
variable = 1.2;
 
wcout << variable;
}
//...
и результат:
Типы данных

Хорошенький у нас int вышел?
variable в этом случае вообще бестиповой получается. Прямо как в Бейсике
Можно, конечно, шаблоны подключить, но это - право, извращение...
0
186 / 173 / 18
Регистрация: 22.03.2010
Сообщений: 612
03.06.2011, 14:44 7
а что собственно не так? variable по прежнему имеет тип double или float как ты и объявил изначально.
variable = 1.2;
ты написал очевидно после switch, поэтому он и вывел то что вывел. Всё правильно, все довольны

Добавлено через 2 минуты
если написать это до свитча то он соответсвенно выведет 1
0
Эксперт С++
5037 / 2616 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
03.06.2011, 14:48 8
http://www.boost.org/doc/libs/... y/s02.html
1
Программист
119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
03.06.2011, 15:00 9
pito211, Так, уважаемый(-ая), вся работа с переменными идет после преобразования (в нашем случае блок switch), если работать с переменной до преобразования, то на фиг это преобразование вообще нужно? В данном случае я имею ввиду конкретно тип int.


fasked, Про шаблоны я писал выше.
0
Evg
Эксперт CАвтор FAQ
21248 / 8263 / 637
Регистрация: 30.03.2009
Сообщений: 22,608
Записей в блоге: 30
03.06.2011, 15:02 10
Цитата Сообщение от LORDIFF Посмотреть сообщение
Нужно создать переменную с типом, которую выбрали с консоли
Так ты и создал переменные

Цитата Сообщение от LORDIFF Посмотреть сообщение
Как вы наверно понимаете, ничего не работает
А что в твоём понимании должно произойти (или напечататься), чтобы можно было сказать, что оно работает. Другими словами, в чём конкретно заключается смысл задания?
0
186 / 173 / 18
Регистрация: 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. Логично
0
Программист
119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
03.06.2011, 15:11 12
pito211, Я хотел увидеть runtime error
0
186 / 173 / 18
Регистрация: 22.03.2010
Сообщений: 612
03.06.2011, 15:18 13
код абсолютно безопасный, даже если variable будет типа bool, тогда просто при приобразованиях возможны потери. Но run_time не вылезет
0
Программист
119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
03.06.2011, 15:27 14
pito211, Так вот и хреново, если не вылезет, потому что при запросе типа я выбираю 1 (тип int), а потом (в каком-то месте программы, скажем далеко-далеко) присваиваю ему значение 1.2 и программа это с лёгкостью проглатывает. Как дальше пойдет работа с этим значением (int i = 1.2) одному богу известно. Как вы думаете?
0
Evg
Эксперт CАвтор FAQ
21248 / 8263 / 637
Регистрация: 30.03.2009
Сообщений: 22,608
Записей в блоге: 30
03.06.2011, 15:28 15
Цитата Сообщение от prZzZ Посмотреть сообщение
Как дальше пойдет работа с этим значением (int i = 1.2) одному богу известно. Как вы думаете?
"А чего тут думать? Трясти надо!" (с)
Другими словами, об этом за тебя уже подумали много лет назад и всё в стандарте языка написали
0
186 / 173 / 18
Регистрация: 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
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.06.2011, 15:37
Помогаю со студенческими работами здесь

Типы данных
Здравствуйте! В результате программа должна выводить типы данных переменных и их значения. Но...

типы данных
на Си реализовать: (не С++) построить функцию, возвращающую все байты заданного вещественного х в...

Типы данных в C++
Кто знает, есть ли в C++ тип данных, которому можно присваивать как числовые, так и строковые...

Типы данных
Перекопал везде и всюду, может где-то и есть обьяснение по поводу типов данных. Какая разница...


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

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

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