Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何检查用户输入的号码是否为';t大于最小值或小于最小值?_C_Limits - Fatal编程技术网

C 如何检查用户输入的号码是否为';t大于最小值或小于最小值?

C 如何检查用户输入的号码是否为';t大于最小值或小于最小值?,c,limits,C,Limits,我想检查用户输入的数字是否大于或小于告知值 我知道,但它似乎没有特别的帮助,基于未定义值的检查看起来不太令人信服 我还知道,我可以检查用户输入的字符串是否都是数字,在这种情况下,我可以检查字符串的长度是否大于LLONG_MAX或LLONG_MIN的长度,只要删除左侧的0,或者如果两者的长度相同,我可以逐位检查,如果该数字中输入的数字的值大于LLONG_MAX或LLONG_MIN的值,则超出范围 但我想应该有更好的方法来做到这一点。希望您能给我一些提示,告诉我该怎么做。请改用strtoll功能 如

我想检查用户输入的数字是否大于或小于告知值

我知道,但它似乎没有特别的帮助,基于未定义值的检查看起来不太令人信服

我还知道,我可以检查用户输入的字符串是否都是数字,在这种情况下,我可以检查字符串的长度是否大于
LLONG_MAX
LLONG_MIN
的长度,只要删除左侧的0,或者如果两者的长度相同,我可以逐位检查,如果该数字中输入的数字的值大于
LLONG_MAX
LLONG_MIN
的值,则超出范围


但我想应该有更好的方法来做到这一点。希望您能给我一些提示,告诉我该怎么做。

请改用
strtoll
功能

如果输入的值超出范围,
errno
设置为
ERANGE
,并根据值是否溢出返回
LLONG_MIN
LLONG_MAX

从:

函数返回转换的结果,除非 该值将下溢或溢出。如果发生下溢,
strtol()
返回
LONG\u MIN
。如果发生溢出,
strtol()
返回
LONG\u MAX
。在这两种情况下,
errno
都设置为
ERANGE
。精确地
strtoll()
(使用
LLONG_MIN
LLONG_MAX
而不是
LONG\u MIN
LONG\u MAX


使用
strtol
。Per:

如果正确值超出可表示值的范围,
{LONG_MIN}
{LONG_MAX}
{LLONG_MIN}
{LLONG_MAX}
应为 返回(根据值的符号),并且
errno
设置为
[ERANGE]

因此:


你们可以从LLONG_MAX中逐位减去数值,当结果为负数时,你们就成功了。但是,您需要小心,不要通过减去一个数字而使其溢出。
errno = 0;
long long result = strtoll( inputStr, NULL, 0 );
if ( ( LLONG_MAX == result ) && ( ERANGE == errno ) )
{
    /* handle error */
   ...
}