【发布时间】:2011-11-19 15:40:16
【问题描述】:
目前我正在使用 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 中依赖于机器,所以当出现问题时,我不知道是不是我和我糟糕的编码,或者我的机器与其他人不同的事实导致了错误。我会坚持下去,因为我知道这种事情可以调查和解决,但是我不想在这上面浪费太多时间,所以我会问一下,看看是否有捷径。
十进制验证部分我对如何处理有各种想法,但我不抱希望。你有什么意见?
任何想知道我为什么这样做的人:没关系,我可以很容易地解决需要这个数组的更高级别的问题,并且它适用于所有有效的输入。但是我现在只是迂腐,因此提出了这个问题。
【问题讨论】:
-
您可能应该将您的问题视为与字符串相关,而不是与数字相关...
-
在您的最后一条规则中,您的意思是删除小数点还是四舍五入?
-
@Basile:正是我说我很害怕的原因:PC 和字符串不能很好地混合。
-
不,C 是一种低级语言,可以很好地处理字符串。
-
高效,但不优雅。 @leemes:是的,我的意思是删除小数点,然后根据新值重新验证
标签: c arrays validation tcc long-long