我需要检查一下,如果输入正确,就像丢弃一些错误的输入,比如'b',-2等。继承我的简单代码,如何检查它:
#include <stdio.h>
int main()
{
unsigned long long bigNumber;
if(scanf("%llu", &bigNumber) == 0)
printf("Input error!");
else
printf("%llu\n", bigNumber);
return 0;
}
但是当我输入
时-2
我得到了这个输出:
18446744073709551614
这是错误的,因为-2不是无符号长的长。
当我尝试更改
上的输入条件时if((scanf("%llu", &bigNumber) == 0) || (bigNumber < 0))
令人惊讶的是,我收到了编译错误:
ex.c:6:52: error: comparison of unsigned expression < 0 is always false
[-Werror,-Wtautological-compare]
if((scanf("%llu", &bigNumber) == 0) || (bigNumber < 0))
~~~~~~~~~ ^ ~
1 error generated.
那么,我如何正确检查我的大号码,如果它必须是0到10 ^ 19之间的整数?
答案 0 :(得分:0)
在C99标准中,输入值减号是可选的,因此如果读取减号,则不会出现错误,结果将是负数的两个补码,可能是一个非常大的值。 (Wikipedia)
您必须读取已签名的号码并检查x < 0
,或在比较之前将读取的无符号值转换为已签名。