Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
LORDIFF
0 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 3
#1

Типы данных

03.06.2011, 12:57. Просмотров 944. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2011, 12:57
Ответы с готовыми решениями:

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

Типы данных C++
Подскажите какие вещественные и целые типы самые большие и маленькие

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

типы данных
int x1, x2; float summa; x1 = 5; x2 = 6; summa = (x1 + x2)/2; ...

Типы данных
Добрый день. Очень нужна помощь умных людей в написании программы, задание...

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

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

Добавлено через 2 минуты
если написать это до свитча то он соответсвенно выведет 1
0
fasked
Эксперт С++
4981 / 2560 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
03.06.2011, 14:48 #8
http://www.boost.org/doc/libs/1_46_1/doc/html/any/s02.html
1
prZzZ
Программист
112 / 92 / 8
Регистрация: 22.03.2011
Сообщений: 236
03.06.2011, 15:00 #9
pito211, Так, уважаемый(-ая), вся работа с переменными идет после преобразования (в нашем случае блок switch), если работать с переменной до преобразования, то на фиг это преобразование вообще нужно? В данном случае я имею ввиду конкретно тип int.


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

Цитата Сообщение от LORDIFF Посмотреть сообщение
Как вы наверно понимаете, ничего не работает
А что в твоём понимании должно произойти (или напечататься), чтобы можно было сказать, что оно работает. Другими словами, в чём конкретно заключается смысл задания?
0
pito211
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
prZzZ
Программист
112 / 92 / 8
Регистрация: 22.03.2011
Сообщений: 236
03.06.2011, 15:11 #12
pito211, Я хотел увидеть runtime error
0
pito211
186 / 173 / 18
Регистрация: 22.03.2010
Сообщений: 612
03.06.2011, 15:18 #13
код абсолютно безопасный, даже если variable будет типа bool, тогда просто при приобразованиях возможны потери. Но run_time не вылезет
0
prZzZ
Программист
112 / 92 / 8
Регистрация: 22.03.2011
Сообщений: 236
03.06.2011, 15:27 #14
pito211, Так вот и хреново, если не вылезет, потому что при запросе типа я выбираю 1 (тип int), а потом (в каком-то месте программы, скажем далеко-далеко) присваиваю ему значение 1.2 и программа это с лёгкостью проглатывает. Как дальше пойдет работа с этим значением (int i = 1.2) одному богу известно. Как вы думаете?
0
Evg
Эксперт CАвтор FAQ
19276 / 7133 / 528
Регистрация: 30.03.2009
Сообщений: 19,973
Записей в блоге: 30
03.06.2011, 15:28 #15
Цитата Сообщение от prZzZ Посмотреть сообщение
Как дальше пойдет работа с этим значением (int i = 1.2) одному богу известно. Как вы думаете?
"А чего тут думать? Трясти надо!" (с)
Другими словами, об этом за тебя уже подумали много лет назад и всё в стандарте языка написали
0
pito211
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
03.06.2011, 15:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2011, 15:37

Типы данных
Ребят, можете мне помочь написать простенькую прогу на c++ где использовались...

Типы Данных
Извиняюсь, за тупой вопрос, но какой самый большой целочисленный тип данных...

типы данных
уважаемые программисты, как отвести типу char 2 байта? пишу шахматы, 6 фигур,...


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

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

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