gpt4 book ai didi

c - 检查 unsigned long long 的正确输入时出现负数错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:20:45 27 4
gpt4 key购买 nike

我需要检查输入是否正确,比如抛出一些错误的输入,如“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 不是 unsigned long long。

当我试图改变输入条件时

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 之间的整数,我该如何正确检查它呢?

最佳答案

在 C99 标准中,输入值减号是可选的,因此如果读取减号,则不会出现错误,结果将是负数的二进制补码,可能是一个非常大的值。 ( Wikipedia )

您必须读入一个带符号的数字并对照 x < 0 进行检查,或在比较前将读取的无符号值转换为有符号。

关于c - 检查 unsigned long long 的正确输入时出现负数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47123065/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com