如何检查用户输入的号码是否大于LLONG_MAX或LOWER而不是LLONG_MIN?

use*_*180 2 c limits

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

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

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

但我想必须有更好的方法来做到这一点.希望你能给我一些关于这种方式的提示.

dbu*_*ush 5

请改用此strtoll功能.

在情况下,输入的值超出范围,errno被设定为ERANGE与任一LLONG_MINLLONG_MAX返回,这取决于是否值下溢或溢出.

手册页:

strtol()函数返回转换结果,除非该值会下溢或溢出.如果发生下溢,则 strtol() 返回 LONG_MIN.如果发生溢出,则strtol() 返回LONG_MAX.在这两种情况下,errno都设置为ERANGE.恰好相同 strtoll() (用 LLONG_MINLLONG_MAX 代替 LONG_MINLONG_MAX).