目前我使用的是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个条件。
我遇到的问题是,尝试测试外部边界会导致Integer溢出,并搞砸我的检查。因此,我创建了一个临时的long long数组,用于保存用于验证目的的输入。当一切都被成功验证后,它应该可以放入一个整数数组中,所以我将(以某种方式)将长整型数组从temp数组复制到实际数组中,然后像往常一样启动程序。
我花了很长的时间做我想做的事情,但是我的代码很快就变得杂乱无章,所有的东西在C中都是如此模糊和依赖于机器,所以当出现问题时,我不知道是我和我糟糕的代码造成的,还是我的机器与其他所有人的机器不同导致了错误。我会坚持下去,因为我知道这种事情是可以调查和解决的,但我不想在上面浪费太多时间,所以我会问一下,看看有没有捷径。
小数验证部分我对如何处理有各种想法,但我不抱希望。你的意见呢?
任何想知道我为什么要这么做的人:这并不重要,我可以很容易地解决需要这个数组的更高级别的问题,它将适用于所有有效的输入。然而,我现在只是学究,所以才有这个问题。
发布于 2011-11-19 23:48:34
首先,你的条件有一些问题。如果一个数字小于-2147483648,那么它也小于15,因此检查永远不会匹配(小于15的数字也不是小数)。
其次,您可以使用strtol检查溢出(检查errno中的ERANGE),然后与您的限制进行比较(尽管如果您的long有32位并且是二进制补码,则不需要)。
至于小数,如果您总是想要删除小数点(不是您所说的那样,因为您的条件是一系列其他条件都失败了),那么您可以设置一个预处理步骤,从字符串中删除句点。使用两个指针-一个读指针和一个写指针-就可以很容易地就地完成。
https://stackoverflow.com/questions/8195084
复制相似问题