如果数字是整数,如何签入此代码?
How do I check in this code if the number is in integer?
我编写这段代码是为了检查我在视频中学到的异常,现在我尝试计算整数的立方体,如果输入的数字不是整数,我希望向用户宣布异常。
#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;
}
将以下内容添加到您的源代码中:
#include <math.h> /* round, floor, ceil, trunc */
...
if (x == round(x)) {
...
}
可以在这里找到解释:C++ Reference
您可以使用 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
来处理数字。
我编写这段代码是为了检查我在视频中学到的异常,现在我尝试计算整数的立方体,如果输入的数字不是整数,我希望向用户宣布异常。
#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;
}
将以下内容添加到您的源代码中:
#include <math.h> /* round, floor, ceil, trunc */
...
if (x == round(x)) {
...
}
可以在这里找到解释:C++ Reference
您可以使用 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
来处理数字。