Проблема определения, является ли ввод целым числом C ++ - PullRequest
0 голосов
/ 07 февраля 2019

Я пишу функцию, которая определяет, соответствует ли ввод желаемому типу (int, double, float)

Вот мой код:

Моя проблема возникает, когда я проверяюint input.Введите как 4.0, где все десятичные дроби равны 0, не принимаются.

Как я могу обойти это?

#include<iostream>
#include<string>
#include<sstream>

template <typename T>
bool is_type(std::string Input)
{
    std::stringstream ss(Input);
    T test;
        std::string remainder;
    if (ss >> test)
    {
        ss >> remainder;
        return (remainder.size() == 0) ? true : false;
    }
    else return false;
}

   int main(void)
{
    std::string Input;;
    std::getline(std::cin, Input);

    if (is_type<int>(Input)) std::cout << "It is valid input.\n";

    return 0;
}    

1 Ответ

0 голосов
/ 07 февраля 2019

«4.0» является допустимым представлением целого числа, а именно цифрового символа «4», за которым следуют некоторые другие вещи.Когда вы читаете этот текст в int, вы получаете правильное значение, а остальная часть ввода остается позади.

Если вы хотите интерпретировать всю строку как числовое значение, и обрабатывать результат какцелое число, когда оно не имеет дробной части, вы должны прочитать весь ввод как значение с плавающей запятой.Если результатом является целочисленное значение, то у вас есть целое число;в противном случае вы этого не сделаете.

double d;
std::cin >> d;
if (d == (int)d)
    std::cout << "got an integer value.\n";
else
    std::cout << "didn't get an integer value.\n";
...