如何检查int输入是否大于2147436647或小于-2147483648?

时间:2016-02-05 19:35:13

标签: c int

这样做:

int nbr;
if (nbr <= -2147483648 || nbr >= 2147483647)
    printf("No way !!");

不写无路!!对于低于下限的值(例如-2147483650),因为输入数字变为正数!!

3 个答案:

答案 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是否在其范围之外,因为它甚至不能保持超出其范围的值。