Как мне проверить этот код, если число в целых числах? - PullRequest
0 голосов
/ 08 января 2019

Я написал этот код, чтобы проверить исключения, которые я выучил в видео, и теперь я попытался сделать куб целым числом, и если введенное число не является целым числом, я хочу, чтобы исключение было объявлено пользователю.

#include <iostream>

float cube( float x)
{
    char ch;
    std::cin.get(ch);

    if(ch=='.')
        throw "Should be an integrer";

    float cube=x*x*x;
    return cube;
}

int main ()
{
    float x;
    std::cout<<" Enter an integrer : ";
    std::cin>>x;
    float cube_x=cube(x);
    std::cout<<"Cube("<<x<<")="<<cube_x<<std::endl;
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Вы можете использовать boost lexical-cast , который предназначен именно для этой цели. Будет сгенерировано исключение, конверсия не удалась. Boost хорошо протестирован, и вы можете использовать его, чтобы сделать преобразование для вас.

Это может выглядеть так:

#include <boost/lexical_cast.hpp>
#include <iostream>


int cube(int x)
{
    return x*x*x;
}

int main()
{
    std::string x;
    std::cout << " Enter an integrer : ";
    std::cin >> x;
    try
    {
        int y = boost::lexical_cast<int>(x);
        int cube_x = cube(y);
        std::cout << "Cube(" << x << ")=" << cube_x << std::endl;
    }
    catch (const boost::bad_lexical_cast &e)
    {
        std::cerr << e.what() << '\n';
    }
    return 0;
}

Кстати, если ваша программа должна обрабатывать только целые числа, вы должны также использовать тип int, а не float для обработки чисел.

0 голосов
/ 08 января 2019

Добавьте следующее в ваш исходный код:

#include <math.h>       /* round, floor, ceil, trunc */
...

if (x == round(x)) {
   ...
}

Объяснение можно найти здесь: C ++ Ссылка

...