2011-10-18 4 views
2

Je génère un nombre aléatoire et vérifie si le caractère contenu est un certain caractère (par exemple 0xDB). Cela ne semble pas être la bonne façon de le faire car il semble que mon if() soit toujours faux et passe à autre chose.Vérifiez si un caractère dans un tableau est un certain caractère

Comment puis-je y parvenir? Code ci-dessous. Merci!

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

Bienvenue dans Stack Overflow! Quel est le type de 'buffer'? –

Répondre

4

Quel est le type de buffer? Je suppose que c'est signed char ou implicitement signé char. La portée d'un caractère signé dans la plupart des implémentations est (-128, + 127). 0xDB est en dehors de cette plage, de sorte que le test d'égalité peut ne jamais être vrai.

Essayez de changer le type de tampon à unsigned char, ou le remplacement de votre test avec:

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

ou

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

Si tel était mon code, je serais probablement récrire comme celui-ci :

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

Cela rend plus facile de voir que count est incrémentée pas importe quoi, et rend plus clair que buffer[randomNumber] sera mis à 0xDB à la sortie de ce bloc.

Cela ne résoudra pas votre problème sous-jacent; si vous utilisez une char simple, peut-être votre environnement utilise un signed char (comme le permet la norme), et le nombre entier 0xDB va être positif alors que la valeur signed char représentée par le octet0xDB va être négatif . Essayez de passer au unsigned char buffer[].

+0

Salut, merci pour le pourboire! Certainement nettoyé le code. – isosine

Questions connexes