2010-06-05 6 views
1

Je cet extrait du codequestion simple sur C

char *str = “123”; 
if(str[0] == 1) printf("Hello\n"); 

pourquoi je ne peux pas recevoir mes Hello merci à l'avance! comment compilateur exactement fait cette comparaison if(str[0] == 1)?

Répondre

14

Vous voulez faire:

if (str[0] == '1') ... 

La différence est que vous comparez str[0] au nombre 1, alors que mon code ci-dessus compare str[0] au caractère'1' (qui a une valeur ASCII 49). Tous les langages de programmation ne traitent pas les caractères et les nombres de manière interchangeable, mais C le fait.

Consultez la section ASCII pour plus d'informations sur la manière dont les ordinateurs mappent les nombres aux caractères.

1

vous comparez char à un int, il devrait être

if(str[0] == '1') 
8

D'abord la bonne façon est de le faire:

if(str[0] == '1') 

Ou:

if(str[0] == 49) 


Deuxièmement, vous devez prendre soin de la différence entre 1 et '1'

  • 1 est une valeur entière ...
  • '1' est un personnage dont ASCII est égal à 49

Ce qui signifie: ('1'==1) est faux !!

Cependant ('1'==49) est vrai !!

Lorsque vous écrivez '1' en C/C++, il -automatically- traduire au correspondant ASCII49, c'est ainsi '1' est effectivement représenté en C/C++

+0

comment exactement le compilateur fait cette comparaison? – lego69

+0

S'il vous plaît jeter un oeil sur le edit – Betamoo

+0

Pourquoi -1 ......? – Betamoo

1

vous devez demander

* str = "123"; if (str [0] == '1') printf ("Bonjour \ n");

Voir les guillemets simples autour de 1? Vous devez comparer un personnage et comparer un entier.

1

Essayez d'utiliser if(str[0] == '1') au lieu de comparer avec 1 ce que signifie un et vrai dans C :)

2

Ceci est parce que vous comparez le premier caractère de str au numéro 1. Le code de caractère réel de '1' est 49.Ainsi, l'une de ces travailleront:

if (str[0] == '1') 

if (str[0] == 49) 

Rappelez-vous que 1 n'est pas la même chose que '1'. Le premier est un nombre, le second est un personnage. Si vous voulez en savoir plus à ce sujet, vous devriez probablement regarder ici: http://en.wikipedia.org/wiki/Character_encoding

2

* str est un type de pointeur char var ... qui stocke l'adresse de base de la chaîne .str [0] contient le premier caractère ... qui est 1 et il est également char ..so, i il est noté avec est '1' ...

essayez ceci:

if(str[0] == '1') 
    printf("Hello \n"); 
1

utiliser cette ==>

if(str[0] == '1') 
    printf("Hello \n"); 
1

en essayer un ...

if(str[0] == '1') 
    printf("Hello \n");