2010-01-01 9 views
1

Le programme suivant ne fonctionne pas comme prévu.Comparaison de caractères dans une chaîne littérale C

#include <string.h> 
#include <stdio.h> 

int main() 
{ 
    const char *c = "abcdef"; 

    // prints 'f' as expected 
    printf("%c\n", c[5]); 

    // comparison fails, does not print "yes" 
    if (c[5] == 'f') 
     printf("yes"); 
    return 0; 
} 

Comment puis-je comparer un caractère dans une chaîne littérale à une valeur de caractère? Est-il possible sans utiliser les fonctions liées à ASCII, c'est-à-dire chr() ou ord(), supposons que ces fonctions existent. (Je me souviens de les utiliser dans les jours Pascal retour)

Merci

+5

Essayez 'printf (" oui \ n ");' ou 'puts (" yes ");'. Vous n'avez pas besoin de 'string.h'. –

+0

ok je me sens bête. J'ai raté oui, comme Matt Greer a souligné – idazuwaika

Répondre

6

Il doit y avoir autre chose qui se passe avec votre environnement. J'ai juste jeté ça dans gcc et ça imprime "oui" comme prévu. Etes-vous sûr de ne pas manquer le "oui", car printf n'ajoute pas de nouvelle ligne par défaut, donc il peut s'agir de "oui [votre invite de shell]" et vous ne voyez que le oui?

4

Je ne vois rien de mal avec le code, à l'exception:

  • Vous devez terminer votre sortie avec un saut de ligne. Je suggère puts("yes"); (ou si vous voulez utiliser printf(), printf("yes\n");).
  • Vous n'avez pas besoin de string.h.
  • Ce que vous faites est mieux que de recourir à l'ASCII ou à tout autre encodage. La comparaison que vous avez fonctionne pour tous les encodages, alors que si vous avez recours à la comparaison ASCII, les choses vont se casser sur les plates-formes avec des encodages non-ASCII. La comparaison, comme écrit, est bien.

Le problème principal semble être que la sortie n'est pas terminée avec un retour à la ligne.

0

Lorsque vous essayez d'accéder au caractère à l'index 5 en utilisant printf et obtenir 'f'.
Maintenant vous ne modifiez pas la chaîne n'importe où (Vous ne pouvez pas la modifier car c'est une constante de chaîne).
Plus tard, vous comparez le même caractère à l'index 5 avec la constante char 'f'. Ce test devrait retourner true et le "oui" devrait être imprimé dans la sortie.

Questions connexes