2011-11-19 16 views
0

目前我使用TCC,因为它是获得对Windows安装程序最简单的事情。只需解压缩,然后就可以开始了。但是我接受其他的编译器,GCC,不管微软对报价等龙隆,小数和输入验证用C

我的问题是,我需要输入验证到整数的大小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的临时数组来保存输入以进行验证。目前一切验证成功,应该适合整数数组,所以我会(在某种程度上)从临时数组复制长多头实际之一,启动程序正常。

我弄了很久很久,试图做我想做的事情,但是我的代码变得很杂乱,一切都非常模糊,并且依赖于C机器,所以当出现错误时,我不知道是否这是我和我的蹩脚编码,或者我的机器与其他所有导致错误的机器不同。我要坚持它,因为我知道这样的事情可以进行调查,并制定了,但是我不想浪费太多的时间,所以我会问那么,看看是否有一个快捷方式。

小数部分验证我得对如何处理不同的想法,但我不抱希望。你怎么看?

谁想要知道我为什么这样做:没关系,我可以解决很容易,需要这个数组的更高层次的问题,它会为所有有效的输入工作。然而,我现在只是迂腐,因此这个问题。

+1

你或许应该考虑你的问题,因为字符串相关的,不相关的数... –

+0

在你过去的规则,你真的是去掉小数点还是你也许意味着四舍五入的号码了吗? – leemes

+0

@Basile:正是我说我很害怕:P C和字符串混合不好。 – TheIronKnuckle

回答

1

首先,你的情况有一些问题。如果一个数字在-2147483648之下,它也不到15,所以检查从不匹配(既不是15以下的数字的小数)。其次,你可以用strtol(检查errnoERANGE)检查溢出,然后与你的限制进行比较(尽管如果你的长度为32位,并且是二进制补码,则不需要)。

对于小数,如果您总是要删除小数点(而不是您要说的因为您在一系列其他条件失败的情况下表达的意思),则可以设置一个预处理步骤,串。它可以很容易地用两个指针来完成 - 一个读指针和一个写指针。

+0

预处理步骤,从字符串中删除时期?但是我需要在运行时做到这一点。你能详细说明你的意思吗?而对于其他我马虎伪啊,对不起,如果链条:P – TheIronKnuckle

+0

@TheIronKnuckle我做检查前的意思。 – Artefacto

+0

你可以发布就地代码吗?我挣扎 – TheIronKnuckle