2013-04-18 57 views
1

我有一個函數用於檢查字符串的格式是否正確。我試圖通過查看每個字符並確定它是否是正確的類型來做到這一點。然而,無論我嘗試什麼,我都會得到一個我無法弄清楚的錯誤。代碼如下:檢查字符串中每個字符的類型是

bool valid(string checkcode) 
{ 
    if(checkcode.length()!=6) return false; 
    else if(isalpha(checkcode.at(0)))&(isalpha(checkcode.at(1)))&(isdigit(checkcode.at(2)))&(isdigit(checkcode.at(3)))&(isalpha(checkcode.at(4)))&(isalpha(checkcode.at(5))) return true; 
    else return false; 
} 

我得到的錯誤是在第一個「&」和它說:「錯誤:表達式必須是Ivalue或功能代號」我真的堅持在這裏,任何幫助讚賞。

+1

你是不是指'&&'不是'&'? –

+0

請保持習慣於複製和粘貼編譯器消息,而不是自己重新輸入它們。這樣,你會正確得到*左值*而不是* Ivalue *。這是小寫的el,不是資本i。 –

回答

3
isalpha(checkcode.at(0)))&(isalpha(checkcode.at(1))) 
         //bit and 

應該

isalpha(checkcode.at(0)))&&(isalpha(checkcode.at(1))) 
         //^^logical and 

您需要在這種情況下使用logical and

您還需要確保您的圓括號匹配。

//better to format multiple conditions and make sure() match 
if(
    (isalpha(checkcode.at(0))) 
    &&(isalpha(checkcode.at(1))) 
    &&(isdigit(checkcode.at(2))) 
    &&(isdigit(checkcode.at(3))) 
    &&(isalpha(checkcode.at(4))) 
    &&(isalpha(checkcode.at(5))) 
) 
return true; 
+0

當我這樣做時,我得到「錯誤:預期的表達式」 –

+0

@Danger_Fox看到更新後的帖子,因爲你的()不匹配 – taocp

3
bool valid(string checkcode) 
{ 
    return checkcode.length() == 6 
     && (isalpha(checkcode.at(0))) 
     && (isalpha(checkcode.at(1))) 
     && (isdigit(checkcode.at(2))) 
     && (isdigit(checkcode.at(3))) 
     && (isalpha(checkcode.at(4))) 
     && (isalpha(checkcode.at(5))); 
} 
1

原因你的錯誤是,你的括號是在錯誤的地方。編譯器抱怨的&以外的if語句的條件表達式。

編譯器看到以此爲條件進行測試:

if(isalpha(checkcode.at(0))) 

其餘部分被認爲是當條件爲真執行語句:

&(isalpha(checkcode.at(1)))... 

因此,編譯器是正確的。當它看到一個一元運算符&運算符時,它期望操作數是可以採用的地址,例如左值或函數。

仔細閱讀錯誤消息和代碼將幫助您下次找到這種錯誤。 (也就是說,當編譯器抱怨缺少一個「左值或函數指示符」時,問問自己什麼會使它期望這樣的事情,它首先需要那些東西,所以考慮爲什麼它認爲它你應該有一個二元運算符,所以仔細看代碼以確定爲什麼它不被解釋爲二元運算符,你知道C++語法,所以你知道if聲明必須是整個括號中,所以你知道只有第一個表達式是條件的一部分。這不是你想要的,所以你會意識到右括號是錯誤的)

因爲它是,單個&符號&運算符不是你應該用於布爾表達式。您應該改用&&。這種差異不會導致你看到的錯誤,也不會對代碼的運行時行爲產生明顯的影響。

相關問題