gpt4 book ai didi

c - C 中的 Long Long、小数和输入验证

转载 作者:行者123 更新时间:2023-11-30 16:00:00 27 4
gpt4 key购买 nike

目前我正在使用 TCC,因为它是在 Windows 上进行设置最简单的方法。只需解压缩即可开始使用。不过,我对其他编译器、GCC、微软提供的任何编译器持开放态度。

我的问题是我需要验证大小为 16 的整数数组的输入。这是我的规则:

if number is under 15 (including negative values) then input is valid
if number is under -2147483648 then -2147483648

if number is over 2147483647 then 15
else if number is over 15 then mod 16

if the number is a decimal, remove decimal point and validate again

考虑到我正在使用 C,最后一点让我感到害怕,我稍后会再讨论它。现在我只是尝试处理前 4 个条件。

我遇到的问题是,尝试测试外部边界会导致整数溢出并搞砸我的检查。因此,我创建了一个临时的 long long 数组来保存输入以进行验证。一旦一切都成功验证,它应该适合一个整数数组,因此我将(以某种方式)将长整型从临时数组复制到实际数组并正常启动程序。

我已经搞乱了 long long 并试图做我想做的事情,但我的代码很快变得困惑,一切都如此模糊并且依赖于 C 语言,所以当出现问题时我不知道它是否是我和我蹩脚的编码,或者我的机器与其他人的机器不同导致了错误。我会坚持下去,因为我知道这种事情可以调查和解决,但我不想在这上面浪费太多时间,所以我会问一下,看看是否有捷径。

十进制验证部分我对如何处理有各种想法,但我不抱希望。你有什么看法?

任何想知道我为什么这样做的人:没关系,我可以很容易地解决需要这个数组的更高级别的问题,并且它将适用于所有有效的输入。然而我现在只是迂腐,所以提出了这个问题。

最佳答案

首先,你的条件有一些问题。如果一个数字低于 -2147483648,它也低于 15,因此该检查永远不会匹配(对于 15 以下的数字也不是小数)。

其次,您可以使用 strtol 检查溢出(检查 errno 中的 ERANGE),然后与您的限制进行比较(尽管没有必要)如果你的 long 有 32 位并且是二进制补码)。

对于小数,如果您总是想要删除小数点(不是您所说的您想要的,因为您的条件是一系列其他条件失败),您可以设置一个预处理步骤,从字符串中删除句点。它可以很容易地用两个指针就地完成——一个读指针和一个写指针。

关于c - C 中的 Long Long、小数和输入验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8195084/

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