2014-03-24 200 views
-1

我正在寫一個函數,它傳遞一個字符作爲第一個參數,一個整數作爲第二個參數。我需要同時驗證兩者。具體來說,字符必須在A和J之間(包括A和J),整數必須在1到10之間(包括1和10)。C++驗證字符範圍

我寫的一行是:

if (toupper(row) < 'A' || toupper(row) > 'J' || col < 1 || col > 10) 
{ 
    return 0; 
} 
else 
{ ... rest of function ... } 

但這不能正常工作。在我的書中,我讀到你可以和角色進行比較,因爲他們本身只是整數,但我無法弄清楚爲什麼不行。任何人都可以將我指向正確的方向嗎?

編輯,以解決一些意見

0是我們應該返回,如果輸入的是無效的數量。

這行代碼是由我的老師編寫的「測試驅動程序」進行評分的項目的一部分。測試驅動程序報告說,當輸入無效時(字符不在A或J之間,或者數字小於1或大於10),我的函數沒有返回正確的結果。

我組織了我的代碼,以便如果上面的語句是true,那麼它返回我們應該返回的代碼,否則它繼續與函數的其餘部分...所以我不明白爲什麼他的測試驅動程序告訴我,如果輸入無效,我不會返回代碼。另一個問題是他不讓我們看看測試驅動程序發送給我們的功能,所以我無法解決這個問題。

+0

你的邏輯是倒置的,做一個桶滾! – nonsensickle

+1

代碼看起來像正確檢測到無效字符。你爲什麼說它不能正常工作? –

+1

你說過「......這工作不正常。」你打算做什麼,它在做什麼? – aldo

回答

1

我認爲你不應該使用toupper。爲什麼?

因爲也許你的教授使用像無效輸入:

a, 5 

,你不應該允許較低的情況下通過測試。

那麼,到底你的if語句:

if ((row >= 'A' && row <= 'J') && (col > 0 && col < 11)) 
+0

這是完全相同的測試,但倒置。由於OP沒有說明「if」的主體是什麼,你無法判斷這是否有幫助。 –

+0

是的,你是對的,那麼在幾個問題更新後,我想我找到了答案。 – Ardel

+0

這工作。我翻轉了聲明,以便我的其餘函數在真正的分支中使用它。我們也被告知(口頭)案件並不重要,這就是爲什麼我使用toupper(),但顯然他的測試驅動程序只是在尋找大寫字母。我不認爲不要使用toupper(),因爲我們被明確告知該案件無關緊要。因此,我試圖弄清楚這一點的挫敗感。謝謝! – Sabien

1

從您的文章並不清楚什麼行不通。您在沒有任何複合語句的情況下編寫語句那麼什麼是錯誤的標準?!

例如,你可以寫

if (toupper(row) < 'A' || toupper(row) > 'J' || col < 1 || col > 10) return false; 

要考慮到表達

if ((toupper(row) >= 'A' && toupper(row) <= 'J') && (col > 0 && col < 11)) 

因爲它是由@Ardel寫的否定等同於

if (!((toupper(row) >= 'A' && toupper(row) <= 'J') && (col > 0 && col < 11))) 

那這又相當於

if (!(toupper(row) >= 'A' && toupper(row) <= 'J') || !(col > 0 && col < 11))) 

,等效於

if (!(toupper(row) >= 'A') || !(toupper(row) <= 'J') || !(col > 0) || !(col < 11)) 

,等效於

if (toupper(row) < 'A' || toupper(row) > 'J' || col <= 0) || col >= 11) 

是在最後相當於

if (toupper(row) < 'A' || toupper(row) > 'J' || col < 1 || col > 10) return false; 

那是你的原始表達式。

因此,在您的文章和@Ardel的回答中沒有任何意義。

所以我不明白爲什麼@Ardel的答案被uo投票。也許它被誰投票誰是無法做這樣的轉換,否定布爾表達式?:)

我可以假設(而且在思考我確信後),你不應該對角色應用功能toupper。例如

if (row < 'A' || row > 'J' || col < 1 || col > 10) return 0; 

另一個問題是你沒有說如果這個條件會成功通過,那麼函數應該做什麼。也許在函數體中您應該重新排以下方式

row -= 'A'; 

,要使用它作爲1和10之間(含)的整數值。

+0

對不起,我感到困惑 - 我添加了其餘的if語句。如果輸入無效,則該函數應該返回0,否則繼續執行該函數的其餘部分。 – Sabien

+1

@Sabien在你的描述中,沒有什麼可以說角色必須轉換成大寫。 –