2011-10-18 11 views
2

乱数を生成し、含まれている文字が特定の文字(つまり0xDB)であるかどうかを確認しています。これは、if()が常にfalseで、elseに行くようなので、正しい方法ではないようです。配列内の文字が特定の文字であることを確認してください

どうすればこの問題を解決できますか?以下のコード。ありがとう!

if(buffer[randomNumber] == 0xDB) 
    count++; 
else { 
    buffer[randomNumber] = 0xDB; 
    arrayChangeFlag++; 
    count++; 
} 
+0

ようこそスタックオーバーフロー! 'buffer'の型は何ですか? –

答えて

4

bufferの種類は何ですか?

signed charまたは暗黙的に署名されたcharのいずれかと思われます。ほとんどの実装での符号付きcharの範囲は(-128、+ 127)です。 0xDBがその範囲外であるため、等価性テストは決して真ではない可能性があります。

unsigned charにバッファの種類を変更してみてください、またはを使用してテストを置き換える:

if((unsigned char)buffer[randomNumber] == 0xDB) 

または

if(buffer[randomNumber] == (char)0xDB) 
0

これは私のコードであれば、私はおそらく再度書きたいことは、このように:

count++; 
if(buffer[randomNumber] != 0xDB) { 
    buffer[randomNumber] = 0xDB; 
    arrayChangeFlag++; 
} 

これにより、countが増分されていないことがわかりやすくなりますこのブロックを終了すると、buffer[randomNumber]0xDBに設定されることが明確になります。

あなたの根底にあるバグは修正されません。あなたは、プレーンcharを使用している場合は、おそらくあなたの環境がsigned charを使用しています(標準で許可されたもの)、およびバイト0xDBで表さsigned char値が負になるだろうされている間整数0xDBが正であることを行っています。 unsigned char buffer[]に変更してみてください。

+0

ねえ、チップのおかげで!間違いなくコードを整理しました。 – isosine

関連する問題