2016-10-20 12 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文の「それから」の部分として解析されます。これは、効果的に使用すると、余分なセミコロンを持っていることを、あなたはif内および冗長チェックを取り除くreturnを使用して、関数が道に簡単にすることができ別に

[ a long-winded if-else statement ] 

playerColor = 255; 

return playerColor; 
+0

ああ、私は本当に馬鹿だと感じる。ありがとうございました。 –

1

にあなたの機能をオン:

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; 
} 

これにより、効果的で短くなりますが、エラーが発生しにくくなります(あなたは数字を複数回繰り返す必要はないので)。ベクトルの値はソート順でなければならないことに留意してください。

+0

ありがとう、私はそれをやります。 –

関連する問題