Se connecter avec
S'enregistrer | Connectez-vous

[|>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 :
  1. if(chaine1[3] == 'é')

ou
  1. 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 ;-)
Lassé par la pub ? Créez un compte

les char sont codés sur 8 bits, cad 1 octet, donc le domaine s'étend de -128 à +127. Le 'é' n'est pas dans la table ascii standard, essaies de l'afficher dans la console et tu verra.
Tu peux utiliser l'unicode, codé sur 2 octets
Expert Programmation

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.
Expert Programmation

Si tu fais:
  1. unsigned char uc = 250;
  2. 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.

ça marche toujours pas !

Voici le code complet :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6. char chaine[3] = "aaé";
  7.  
  8. if(chaine[3] == 'é')
  9. printf("OK");
  10. else
  11. printf("Pas OK");
  12.  
  13. return 0;
  14. }


Et ça donne : "Pas OK"
Expert Programmation

lol... Révise les tableaux petit malin :-D
Ton tableau que tu déclare ainsi: char chaine[3]; est un tableau de 3 cases. Jusque la tout va bien. Mais n'oublie pas que l'indice d'un tableau commence a 0! Il n'y a donc pas de case chaine[3]! Utilise plutot chaine[2]=='é'...
Lassé par la pub ? Créez un compte
  • Contenus similaires :
Tags :
Tom's guide dans le monde