2016-10-20 229 views
1

我已經做了一個函數,將整數輸入轉換爲另一個整數,它返回。具體來說,它採用控制檯顏色,並返回與輸入具有相同背景的對應顏色,但使用白色字符。爲什麼這個函數沒有返回正確的值?

該函數總是返回255.出什麼問題了?

int convertColorToPlayerColor(int color) 
{ 
    int playerColor = 0; 

    if (color <= 15) 
     playerColor = 15; 

    else if ((color > 15) && (color <= 31)) 
     playerColor = 31; 

    else if ((color > 31) && (color <= 47)) 
     playerColor = 47; 

    else if ((color > 47) && (color <= 63)) 
     playerColor = 63; 

    else if ((color > 63) && (color <= 79)) 
     playerColor = 79; 

    else if ((color > 79) && (color <= 95)) 
     playerColor = 95; 

    else if ((color > 95) && (color <= 111)) 
     playerColor = 111; 

    else if ((color > 111) && (color <= 127)) 
     playerColor = 127; 

    else if ((color > 127) && (color <= 143)) 
     playerColor = 159; 

    else if ((color > 159) && (color <= 175)) 
     playerColor = 175; 

    else if ((color > 175) && (color <= 191)) 
     playerColor = 191; 

    else if ((color > 191) && (color <= 207)) 
     playerColor = 207; 

    else if ((color > 207) && (color <= 223)) 
     playerColor = 223; 

    else if ((color > 223) && (color <= 239)) 
     playerColor = 239; 

    else if (color > 239); 
     playerColor = 255; 

    return playerColor; 
} 

回答

4

您有多餘的分號:

else if (color > 239); // <--- the semicolon 

額外的分號被解析爲空if聲明「然後」的一部分。這有效地將您的功能分爲

[ a long-winded if-else statement ] 

playerColor = 255; 

return playerColor; 
+0

哦哇,我真的很笨。謝謝。 –

1

除此之外,你有多餘的分號,你可以讓你的函數方法簡單使用returnif和刪除冗餘檢查:

if (color <= 15) 
     return 15; 

    if (color <= 31) // no need to check color > 15 
     return 31; 

    if (color <= 47) // no need to check color > 31 
     return 47; 
    ... 
    return 255; // no need for if (color > 239) 

,你也可以做二進制查找,而不是的線性檢查:

int convertColorToPlayerColor(int color) 
{ 
    static std::vector<int> v { 15, 31, 47, 63, 79, 95, 111, 127, 143, 175, 191, 207, 223, 239 }; 
    auto it = std::lower_bound(v.begin(), v.end(), color); 
    return it == v.end() ? 255 : *it; 
} 

這不僅會使其更有效且更短,而且使其不易出錯(因爲您不必重複一次以上)。請記住,vector中的值必須按排序順序排列。

+0

謝謝,我會那樣做的。 –

相關問題