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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
xTIGRx
292 / 198 / 2
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
#1

Как проверить, что находится в переменной? - C++

09.08.2013, 13:53. Просмотров 1515. Ответов 33
Метки нет (Все метки)

Недавно возник вопрос...как проверить через инструкцию if какое значение находится в переменой, числовое или текстовое??

допустим такой код

int a=0;
if(a==int) ....

понятное дело что код не рабочий который опысан выше, я его написал чтобы изложить суть моего вопроса, так вот есть ли в С что то подобное, чтобы проверить переменную к какому типо он отностися...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2013, 13:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как проверить, что находится в переменной? (C++):

Как проверить что в переменной char хранится число? - C++
Т.е. что там использованы только числа от 0 до 9 и нет букв?

Как проверить что к переменной прибавилось более чем X - C++
Здравствуйте Уважаемые Форумчане! Сегодня у меня возникла следующая проблема , об которой я даже не знаю как загуглить можно)) ...

Проверить, что найденная фраза находится внутри кавычек - C++
size_t found = workspace.find ("AAA", found+3); Как узнать находится ли слово внутри < > кавычек, при этом внутри могут быть еще...

Проверить что в массиве минимальное значение находится раньше максимального - C++
1.Существует одномерный массив. Правда,что минимальное значение в массиве находится раньше максимального числа?

Присвоить значение наименьшего элемента массива переменной М1, номер строки, где находится этот элемент, - переменной Т, номер столбца - переменной С - C++
Массив С действительных чисел имеет 5 строк и 11 столбцов. Присвоить значение наименьшего элемента массива переменной М1, номер строки, где...

Как сделать так,что бы при введение,например 0;0 выдавалось сообщение,что точка находится на границе? - C++
#include <iostream> using namespace std; int main(){ double x, y; int R=10 cout << "Введите x: " <<...

33
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
09.08.2013, 14:02 #2
Много тем было по этому вопросу. Вот тут есть варианты решения:
Определение введенного типа
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
09.08.2013, 14:03 #3
Язык C++, как и язык C, строго типизированный. Нельзя в целочисленную переменную записать что-то, что не является целым числом.
2
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
09.08.2013, 14:07 #4
Цитата Сообщение от GoldDragon Посмотреть сообщение
int a=0;
Тип int служит для хранения целочисленных значений. Зачем это проверять если ты сам пишешь программу и сам прекрасно об этом знаешь?
1
Kuzia domovenok
1958 / 1811 / 142
Регистрация: 25.03.2012
Сообщений: 6,286
Записей в блоге: 1
09.08.2013, 14:11 #5
Цитата Сообщение от GoldDragon Посмотреть сообщение
допустим такой код
int a=0;
if(a==int) ....
допустим, скажи лучше словами, что ты хотел допустить этим? А то тут все в догадках теряются.
0
Salmon
09.08.2013, 14:16
  #6

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
допустим, скажи лучше словами, что ты хотел допустить этим? А то тут все в догадках теряются.
If(a==int) дословно "если переменная 'a' - переменная типа int, то.."
чего не понятно?

0
Kuzia domovenok
1958 / 1811 / 142
Регистрация: 25.03.2012
Сообщений: 6,286
Записей в блоге: 1
09.08.2013, 14:20 #7
Цитата Сообщение от Salmon Посмотреть сообщение
If(a==int) дословно "если переменная 'a' - переменная типа int, то.."
чего не понятно?
а какой она ещё может быть переменной-то? Это и называется "строгая типизация", потому что вопросов о типе переменных не возникает.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
09.08.2013, 14:21 #8
Для особых извращенцев:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <typeinfo>
 
int main()
{
    int a; // пробуем разные типы тут
    if( typeid(int) == typeid(a) )
    {
        std::cout << "int\n";
    }
    else
    {
        std::cout << "not int\n";
    }
}
1
Salmon
1 / 1 / 0
Регистрация: 15.05.2013
Сообщений: 11
09.08.2013, 14:22 #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а какой она ещё может быть переменной-то?
Хотя да, вы правы.. Если переменная не объявлена - ее нет..
Извиняюсь..
0
coloc
09.08.2013, 14:24
  #10

Не по теме:

Tulosba, а скажите когда реально нужно юзать RTTI? А то в книге не описано ни черта про этот аспект

0
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
09.08.2013, 14:26 #11
ну если предположить что откуда то извне каким то неведомым образом к нам попадает неведомая переменная то можно исполльзовать typeinfo
0
Kuzia domovenok
1958 / 1811 / 142
Регистрация: 25.03.2012
Сообщений: 6,286
Записей в блоге: 1
09.08.2013, 14:33 #12
Цитата Сообщение от Кудаив Посмотреть сообщение
ну если предположить что откуда то извне каким то неведомым образом к нам попадает неведомая переменная то можно исполльзовать typeinfo
каким именно неведомым образом? Через какой-то абстрактный указатель? Как оказалось, что некая функция получила на вход "то не знаю что"?
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
09.08.2013, 14:36 #13
coloc, насколько я понимаю, typeid() имеет смысл использовать только когда нужно просто узнать что за класс, но не работать с объектом этого класса. Иначе - используется dynamic_cast<>, который тоже является частью RTTI. Соответственно, там где есть иерархии классов, можно использовать в том числе и typeid().
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
#include <iostream>
#include <typeinfo>
 
class B
{
public:
    virtual ~B() {};
};
 
class D: public B
{
 
};
 
int main()
{
    B* d = new D;
 
    if( typeid(*d) == typeid(D) )
    {
        std::cout << "D";
    }
    else
    {
        std::cout << "not D\n";
    }
}
Еще не стоит забывать, что RTTI работает только с полиморфными классами (т.е. где есть хотя бы 1 виртуальный метод). Можно в этом убедиться, убрав в примере виртуальный деструктор из базового класса.
1
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
09.08.2013, 14:37 #14
Kuzia domovenok, c POD пример привести затрудняюсь, но вот с классами сработает очень неплохо - имеется класс родитель и целое дерево его потомков + имеется функция принимающая указатель на класс родитель и какой потомок извне поступит в функцию неизвестно
0
Kuzia domovenok
1958 / 1811 / 142
Регистрация: 25.03.2012
Сообщений: 6,286
Записей в блоге: 1
09.08.2013, 14:46 #15
Цитата Сообщение от Кудаив Посмотреть сообщение
Kuzia domovenok, c POD пример привести затрудняюсь, но вот с классами сработает очень неплохо - имеется класс родитель и целое дерево его потомков + имеется функция принимающая указатель на класс родитель и какой потомок извне поступит в функцию неизвестно
Если появилась функция, принимающая указатель на родителя. + Если ей потребовалось, что-то ещё, кроме публичных методов класса родителя = иерархия классов говно
Переделывай интерфейс родителя, переделывай иерархию классов, добавь в родитель виртуальных методов, реализующих требуемую работу.
Если же решать через typeid - всё оопэшное ООП, вся знаменитая оопэшная безопасность и расширяемость - всё летит к чертям собачьим!
2
09.08.2013, 14:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2013, 14:46
Привет! Вот еще темы с ответами:

Как проверить успешность создания динамической переменной? - C++
ПОдскажите пожалуйста как модно проверять успешность создания новой двумерной динамической переменной?

Как проверить размер чаровской переменной именно в битах - C++
Здравствуйте, уважаемые знатоки! Подскажите, пожалуйста, как проверить размер чаровской переменной именно в битах, а потом, если битиков...

Как правильно посмотреть, что находится в массиве пикселей в понятном виде? - C++
Есть камера, с которой в комплекте идет библиотека и её описание с примерами. В одном примере указано: const char* p_buf =...

Как проверить есть ли в string что нибудь ? - C++
Как проверить есть ли в string что нибудь ? Например функция для проверки стороки &quot;S&quot;.


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

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

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