begin process at 2012 05 28 22:16:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

condition


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

condition

mardi 25 février 2003 à 12:19:33 | condition

damoun007

salut a tous,
j aurais voulu savoir la difference entre cela:
{
int a;
if (a=5);
....
}

et si on met le 5 entre apostrophes ou guillemets. Merci bcp

damoun
mardi 25 février 2003 à 13:59:21 | Re : condition

vieuxLion

pour répondre à ta question
5 est un entier littéral considéré par le compilo comme unint qui vaut ... 5
'5' est un caractère isolé considéré par le compilo comme un char... et vaut ...53 (en décimal)
il faut regarder la table ANSI pour cela : '0' vaut 48

de plus, une condition ne s'exprime pas avec = mais avec ==
ceci pour t'éviter des désagréments plus tard.

-------------------------------
Réponse au message :
-------------------------------

> salut a tous,
> j aurais voulu savoir la difference entre cela:
> {
> int a;
> if (a=5);
> ....
> }
>
> et si on met le 5 entre apostrophes ou guillemets. Merci bcp
>
> damoun
mercredi 26 février 2003 à 04:17:33 | Re : condition

jonathanmcdougall

> salut a tous,
> j aurais voulu savoir la difference entre cela:
> {
> int a;
> if (a=5);
> ....
> }
>
> et si on met le 5 entre apostrophes ou guillemets. Merci bcp


5 est un "littéral", un chiffre, une constante, un nombre (comme tu veux) de type int. 5.5 serait encore tout ça, mais de type float.

'5' est un caractère, un character, un char, une lettre (comme tu veux) de type char. À noter que le type char se comporte comme le int, c'est-à-dire que

char c = 65;

contient, sous un système ASCII' la lettre A et que

++c;

contient maintenant (roulement de tambour...) B.

"5" est une chaine de type c, une c-style string, une chaine de caractère, une string, une chaine de caractère terminée par un 0, par un \0, par un NUL, une zero-terminated string (comme tu veux) de type char*. Yurk, me diras-tu.

La différence entre 'a' et "a" est relativement simple. Si tu fais

char c = 'a';
char d = "a";

la deuxième ne devrait pas compiler. La raison vient de la façon dont les strings sont gérées par les compilateurs.

Une string n'est en fait qu'un rassemblement de chars sous forme de tableau :

char mastring[10];

Ici, on pourrait mettre jusqu'à 10 caractères dans ce tableau. Le problème et que si tu fais

std::cout << mastring;

'cout' n'a aucun moyen de savoir où se termine 'mastring'. Il est, en fait, impossible de connaitre directement le nombre d'élément de 'mastring'. 'cout' ne peut pas faire quelque chose comme

for (int i=0; i<sizeof(mastring); ++i)

parce que 'mastring' est en fait un pointeur. Mais tout ça n'est pas si grave.

Ce qu'il faut savoir, c'est que la solution à ce problème est une convention : les chaines de caractères doivent toujours se terminer par le caractère \0. En sachant cela, il est maintenant possible de faire

for (int i=0; ; i++)
{
if (mastring[i] = '\0')
break; //la chaine est terminée

// ....

}

Ce qui nous ramène aux guillemets qui ne sont finalement que pratiques : ils ajoutent automatiquement un \0 à la fin de la string. Donc,

"salut"

est en fait

salut\0

À quoi ça sert? Eh bien sans ça, tu serais obligé de faire :

char *mastring = "salut toi\0";

Ce qui est assez chiant et facile à manquer, te donnant des bugs à n'en plus finir, quasi impossibles à trouver. Les guillemets te l'ajoutent donc automatiquement :

char *mastring = "salut toi";

La morale est que : les apostrophes sont utilisés avec UN SEUL CARACTÈRE et ne rajoutent pas de \0 tandis que les guillemets sont utilisés avec les STRINGS et terminent celles-ci par un \0 automatiquement.

--
Jonathan Mcdougal
Montréal, Québec
mcdougalljonathan@hotmail.com
http://www.multimania.com/utopiasoftware
mercredi 26 février 2003 à 05:23:11 | Re : condition

jonathanmcdougall

> Une string n'est en fait qu'un rassemblement de chars
>sous forme de tableau :
>
> char mastring[10];
>
> Ici, on pourrait mettre jusqu'à 10 caractères dans ce
>tableau. Le problème et que si tu fais
>
> std::cout << mastring;
>
> 'cout' n'a aucun moyen de savoir où se termine 'mastring'.
>Il est, en fait, impossible de connaitre directement le
>nombre d'élément de 'mastring'. 'cout' ne peut pas faire
>quelque chose comme

Désolé, c'est plus ou moins de la connerie.

char mastring[10];
std::cout << sizeof(mastring);

affiche 10 comme prévu. Là où est le problème est lorsqu'on défini un pointeur vers un char auquel on assigne une string 'temporaire' :

char *mastring = "salut"

Ici, sizeof(mastring) retournera la grosseur du pointeur comme tel, pas de la chose sur laquelle il pointe (car, comme je disais, il n'y a aucun moyen de savoir combien d'éléments contient la string). La solution est donc d'ajouter une \0 à la fin de la string, qui permet de trouver sa fin.

Désolé,


Jonathan Mcdougal
Montréal, Québec
mcdougalljonathan@hotmail.com
http://www.multimania.com/utopiasoftware



Cette discussion est classée dans : font, green, condition, courier


Répondre à ce message

Sujets en rapport avec ce message

if...else [ par damoun007 ] bonjour je suis débutant et j'ai un probleme avec le if...else mais aussi avec le do...while et je n'ai pas ose en essayer d autres... Le compilateur symbolze [ par damoun007 ] salut, j aurais voulu avoir ce que je devrais mettre comme symbole pour dire différent ( je ne trouve pas le égal barré !) pour metre dans une instr Liste Chainé en C++... [ par NitRic ] Bonjour, j'aimerais si possible un petit exemple ou bien un site qui parle des Liste Chainé en C++, pour la créée c'est ok mais c avec le fonctionneme Concaténation [ par DJ God ] [redQuel caractère utiliser pour concaténer un texte avec une variable ?][/red] Mettre une fenette en premier plan et l'activer [ par atao ] QQun connait il une façon plus élégnate pour mettre une fenette en premier plan et l'activervoid MettreFenetreDevant(HWND hwndDlg){// car si elle est Base de donnée mais EXEL!! [ par Ben ] Bonjours,J' utilise BCB 5 Pro et je suis très content de ce logiciel ! Seulement maintensant, je dois accéder à une base de donné mais pas n' importe Reseau [ par BenjaminRare ] Bonjour,Si qql 1 pourrait m'aider a trouver un bon site pour apprendre la programmation en c++ pour reseaux et internet.......J'ai commencer la progra Palindrome et espaces [ par TheRecliner ] Bonjour,je dois faire petit programme qui détécte si un phrase est un plaindrome ou non....j'ai bien résussi à faire cette détection mais uniquement p Problème de fenetres [ par Toobad ] Salut tout le monde,J'suis un ptit nouveau dans la programmation Win32 et comme on peut s'en douter pour un nouveau, j'ai un tas de problèmes. J'ai fa police et ListBox [ par JeriKo ] salut à tousça fait 2 heures que j'essaye de changer la police de ma listbox, y a rien à faire ça veut pas :(alors j'ai fait comme çaCListBox *list


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales