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 */
...
}