长长,小数和C输入验证



目前我正在使用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,所以当出现问题时,我不知道是否它是我和我的蹩脚的编码,或事实,我的机器是不同于其他人的,这是导致错误。我要坚持下去,因为我知道这种事情是可以调查和解决的,但是我不想浪费太多时间,所以我会问so,看看是否有捷径。

小数验证部分,我有各种想法如何处理,但我不抱希望。你怎么看?

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

首先,你的条件有些问题。如果一个数字小于-2147483648,它也小于15,所以检查永远不匹配(小于15的数字都不是十进制)。

其次,您可以检查strtol是否溢出(检查errno是否为ERANGE),然后与您的限制进行比较(尽管如果您的long具有32位并且是二进制补码,则不需要)。

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

相关内容

  • 没有找到相关文章

最新更新