2011-11-19 46 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