检测输入中的整数溢出

在C或C ++中是否有办法检查用户提供的数字是否超出整数类型的范围?

例如,让我们假设我们使用的是16位有符号整数,范围为-32768到32767。

如果用户输入55555进入程序,这将被包装成一个负数,这样如果你使用的函数可以接受任何数字,结果将是错误的。

在C或C ++中是否有办法确定用户提供的数字是否在整数类型的范围内?


更新:我在一个简单的减法程序中使用数字,它接受两个数字并从第一个减去第二个数字。

如果用户在程序中输入55555,则将其换行为负数

不总是。 这取决于你如何阅读这个数字。 例如,如果您使用operator>> ,那么该值将不会被包装,它将被拒绝。

在C或C ++中是否有办法确定用户提供的数字是否在整数类型的范围内?

在C ++中,只需使用operator>>

 #include  int main() { signed short int i; std::cin >> i; if(std::cin) std::cout << "You entered a valid number!\n"; else std::cout << "Aw c'mon, play by the rules.\n"; } 

如果你正在使用类似strtol东西,如果发生溢出,它会将errnoERANGE

在C或C ++中是否有办法检查用户提供的数字是否超出整数类型的范围?

这取决于您使用的是什么function( strtol可以做到这一点)。 查看文档。

int和uint之间的唯一区别是如何解释它们。 您的问题没有解决方案,如果它对您考虑切换到浮点参数,检查值和类型转换非常重要。 更新:我认为你想要另一个程序员提供的运行时检查函数参数值,而不是控制台输入。