Сравнение типов данных - PullRequest
2 голосов
/ 26 марта 2011
int item;
cin >> item;

Это в моем коде, но я хочу, чтобы пользователь мог набирать целые числа или строки. Это в основном то, что я хочу сделать:

if(item.data_type() == string){
  //stuff
}

Возможно ли это?

Ответы [ 4 ]

2 голосов
/ 26 марта 2011

Вы не можете сделать это точно, но немного больше работы вы можете сделать что-то подобное. Следующий код работает, если у вас установлены библиотеки Boost. Это может быть сделано без повышения, но это утомительно.

#include <boost/lexical_cast.hpp>

main() {
    std::string val;
    std::cout << "Value: " << std::endl;
    std::cin >> val;
    try {
        int i = boost::lexical_cast<int>(val);
        std::cout << "It's an integer: " << i << std::endl;
    }
    catch (boost::bad_lexical_cast &blc) {
        std::cout << "It's not an integer" << std::endl;
    }
}
1 голос
/ 26 марта 2011

нет, но вы можете ввести строку и затем преобразовать ее в целое число, если оно целое.

0 голосов
/ 26 марта 2011

То, что вы делаете, не является кодом C ++.Он не скомпилируется!


Ваша проблема:

Это в моем коде, но я хочу, чтобы пользователь мог вводить целые числа или строки

Тогда сделайте это:

std::string input;
cin >> input;
int intValue;
std::string strValue;
bool isInt=false;
try 
{   
    intValue = boost::lexical_cast<int>(input);
    isInt = true;
}
catch(...) { strValue = input; }

if ( isInt) 
{
   //user input was int, so use intValue;
}
else
{
   //user input was string, so use strValue;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...