[|>RESOLU<|] [-C-] fonction qui compare deux caractères
Dernière réponse : dans Programmation
Bonjour à tous !
J'aimerais que vous me disiez le nom d'une (ou plusieurs) fonction qui compare 2 caractères pour voir s'ils sont différents.
Je connais strcmp(); mais celle-ci compare des chaines de caractères, et lorsque je veux comparé deux caractères, elle fais crashé mon programme.
et quand je fais :
ou
Mon compilateur me dit :
<warning: comparison is always false due to limited range of data type>
Donc mon code ne marche pas.
Merci de votre aide ;-)
J'aimerais que vous me disiez le nom d'une (ou plusieurs) fonction qui compare 2 caractères pour voir s'ils sont différents.
Je connais strcmp(); mais celle-ci compare des chaines de caractères, et lorsque je veux comparé deux caractères, elle fais crashé mon programme.
et quand je fais :
if(chaine1[3] == 'é')
ou
if(chaine1[3] == 130) // 130 = code ASCII de "é"
Mon compilateur me dit :
<warning: comparison is always false due to limited range of data type>
Donc mon code ne marche pas.
Merci de votre aide ;-)
Autres pages sur : resolu fonction compare caracteres
Lassé par la pub ? Créez un compte
si, les chaines de caractères sont codés en ASCII de 0 à 255.
Si on lit cette valeur en signé les caractères de 128 à 255 sont codés de -127 à -1.
Le problème d'affichage vient du fait que la console DOS affiche de l'ASCII, alors que windows affiche du latin-1. Donc le codage des caractères 128 à 255 sont différents.
Si on reste dans le même domaine, la comparaison ne pose aucun problème.
Sous console DOS, 'é' = 0x82
Sous windows, 'é' = 0xE9
donc il ne faut pas comparer avec 130 mais avec 'é'. La compilation se faisant dans le bon environnement, ça passe.
Si on lit cette valeur en signé les caractères de 128 à 255 sont codés de -127 à -1.
Le problème d'affichage vient du fait que la console DOS affiche de l'ASCII, alors que windows affiche du latin-1. Donc le codage des caractères 128 à 255 sont différents.
Si on reste dans le même domaine, la comparaison ne pose aucun problème.
Sous console DOS, 'é' = 0x82
Sous windows, 'é' = 0xE9
donc il ne faut pas comparer avec 130 mais avec 'é'. La compilation se faisant dans le bon environnement, ça passe.
Si tu fais:
et bien tu auras c = -6
Si tu regardes en mémoire, dans les 2 cas tu aura 1 octet qui vaudra 0xFA (11111010b)
les fonctions qui lisent le caractère ne se soucient pas de savoir si c'est signé ou non puisque c'est le codage ASCII ou Latin-1 qui est utilisé pour d"coder la valeur binaire.
unsigned char uc = 250;
char c = uc;
et bien tu auras c = -6
Si tu regardes en mémoire, dans les 2 cas tu aura 1 octet qui vaudra 0xFA (11111010b)
les fonctions qui lisent le caractère ne se soucient pas de savoir si c'est signé ou non puisque c'est le codage ASCII ou Latin-1 qui est utilisé pour d"coder la valeur binaire.
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
anolol: