这样做:
int nbr;
if (nbr <= -2147483648 || nbr >= 2147483647)
printf("No way !!");
不写无路!!对于低于下限的值(例如-2147483650),因为输入数字变为正数!!
答案 0 :(得分:1)
int
只会在超过32位int
的平台上超出范围[-2147436647 2147483647]。
#include <limits.h>
int nbr;
#if INT_MIN < -2147483648 || INT_MAX >= 2147483647
if (nbr < -2147483648 || nbr > 2147483647)
printf("No way !!");
#endif
Pre C99平台可能需要处理-2147483648
。
检测转换为long
的字符串是否超出其范围
char buf[100];
buf[0] = 0;
fgets(buf, sizeof buf, stdin);
errno = 0;
char *endptr;
long x = strtol(buf, &endtr, 10);
if (buf == endptr) puts("No conversion");
else if (errno) puts("Out of long range");
// If `long` is wider than 32-bit and [-2147483648 2147483647] range still needed
else if (x < -2147483648 || x > 2147483647) puts("No way !!");
else printf("%ld\n", x);
答案 1 :(得分:1)
使用long long
类型而不是int
。这将(可能)给你一个64位整数,除非你的编译器是旧的。如果您使用的是scanf
,请使用%lld。
答案 2 :(得分:0)
你无法看到int是否在其范围之外,因为它甚至不能保持超出其范围的值。