Question sur un programme

Résolu/Fermé
maniqk - 28 avril 2015 à 14:15
Cloturernapasdesensfigure Messages postés 111 Date d'inscription vendredi 6 février 2015 Statut Membre Dernière intervention 22 juin 2016 - 28 avril 2015 à 16:58
Bonjour,

Je suis en train d'apprendre le C++ et dans un questionnaire que je consultais j'ai trouvé cette question :

Qu'affiche le code suivant ?

#include <iostream.h>

int main(){
int i = 0;
if (i = 0)
cout << "OK" << endl;
else
cout <<"KO" << endl;
return 0;
}

La réponse est "KO" mais je ne saisis pas pourquoi. J'ai remarqué que dans le "if", il n'y avait qu'un seul signe "=" et donc qu'il n'y a pas de test sur la valeur i, mais j'aimerais savoir ce que comprend le compilateur dans ce cas là puisque je ne vois pas comment il affiche "KO" à la fin.

Merci d'avance.


2 réponses

Utilisateur anonyme
28 avril 2015 à 14:59
Bonjour

Comme tu as bien remarqué, i=0 n'est pas un test. C'est une expression dont la valeur est 0. Et pour le C++, 0 signifie "faux", les autres valeurs "vrai".
Remplace par if (i=1) pour voir la différence
0
Merci je crois avoir compris !
0
Cloturernapasdesensfigure Messages postés 111 Date d'inscription vendredi 6 février 2015 Statut Membre Dernière intervention 22 juin 2016 5
28 avril 2015 à 16:58
Oui en gros quand tu fais "if (i = 0) "
-il affecte la valeur 0 à i
-il teste i qui vaut donc 0
- d'où le KO

c'est équivalent à faire
i=0;
if (i) ...

Mais quand on connait bien les priorités des opérateurs, un if (int i=0) est parfois plus rapide à écrire ... mais plus difficile à comprendre pour certains
0