Menu

if-else en C++ : instructions conditionnelles avec exemples

Comment prendre des décisions en C++ avec if, else if et else : conditions, enchaînement des branches, imbrication, l'opérateur ternaire, le if avec initialiseur et les pièges qui font trébucher.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

Prendre des décisions avec if

Les programmes réagissent en permanence aux données : réussite ou échec, en stock ou épuisé, valide ou non. L'instruction if est la façon dont C++ choisit quel code exécuter en fonction d'une condition.

Un if prend une condition entre parenthèses et exécute le bloc entre accolades uniquement lorsque cette condition est vraie :

La condition score >= 60 est vraie, donc le message s'affiche. La ligne qui suit l'accolade fermante s'exécute toujours — elle se trouve en dehors du if. Changez score en 40 et la ligne « passed » est entièrement ignorée.

La condition est convertie en bool. Les comparaisons comme >, >=, ==, != produisent déjà un bool, mais C++ traite aussi tout nombre non nul comme vrai et 0 comme faux — ainsi if (count) signifie « si count n'est pas nul ». Cette conversion implicite est pratique, mais elle est aussi à l'origine de quelques bugs classiques que vous verrez plus bas.

Ajouter un else

else vous donne le chemin du « sinon » — du code qui s'exécute uniquement lorsque la condition est fausse :

Exactement l'un des deux blocs s'exécute — jamais les deux, jamais aucun. Le else n'a pas de condition propre ; il attrape simplement tout ce que le if n'a pas attrapé.

Enchaîner avec else if

Lorsqu'il y a plus de deux issues possibles, enchaînez les conditions avec else if. C++ les vérifie de haut en bas et exécute le premier bloc dont la condition est vraie, puis ignore le reste :

L'ordre compte. Comme 84 est d'abord testé contre >= 90 (faux), puis contre >= 80 (vrai), il s'arrête à B et ne vérifie jamais les bornes inférieures. C'est aussi pourquoi vous n'avez pas besoin de score >= 80 && score < 90 — atteindre la deuxième branche garantit déjà que score était inférieur à 90. Placez votre condition la plus restrictive ou la plus prioritaire en premier.

Notez qu'il n'existe pas de mot-clé elif en C++ — else if est littéralement un else dont le corps est un autre if. Les accolades font simplement que cela se lit comme une seule échelle.

Un gros piège : = contre ==

Le bug d'instruction if le plus courant en C et C++ est d'écrire = (affectation) là où vous vouliez == (comparaison) :

x = 5 affecte 5 à x et l'expression entière vaut 5, ce qui se convertit en true — la branche s'exécute donc toujours et vous avez silencieusement écrasé x. Cela compile ; la plupart des compilateurs n'émettent qu'un avertissement. Deux défenses : activez les avertissements (-Wall) pour que le compilateur le signale, et envisagez de placer la constante au début — if (5 == x) — car if (5 = x) est une erreur grave que le compilateur détecte immédiatement.

Le même piège se cache avec bool : if (ready = true) compile et affecte, tandis que if (ready == true) (ou simplement if (ready)) compare.

Combiner et imbriquer les conditions

Combinez les conditions avec && (et), || (ou) et ! (non), ou imbriquez un if dans un autre lorsqu'une vérification n'a de sens qu'après qu'une vérification précédente a réussi :

&& et || court-circuitent : dans a && b, si a est faux, C++ n'évalue jamais b. C'est essentiel pour se prémunir contre les accès mémoire incorrects — if (ptr != nullptr && ptr->ready) est sûr car le déréférencement est ignoré lorsque ptr est nul. Préférez aplatir avec && plutôt qu'imbriquer en profondeur quand vous le pouvez ; une condition plate se lit plus clairement qu'une pyramide d'accolades.

Attention au chaînage de comparaisons qui ne signifie pas ce qu'il semble : if (0 < x < 10) ne teste pas une plage. Il évalue 0 < x en un bool (0 ou 1), puis le compare à 10 — toujours vrai. Écrivez plutôt if (0 < x && x < 10).

L'opérateur ternaire

Lorsque tout ce que vous voulez, c'est choisir entre deux valeurs, l'opérateur ternaire ?: est une ligne compacte. Lisez condition ? a : b comme « si condition alors a sinon b » :

Le ternaire produit une valeur que vous pouvez affecter, passer ou afficher directement — quelque chose qu'un simple if ne peut pas faire. Réservez-le à une sélection simple : si l'une des branches nécessite plusieurs instructions ou une vraie logique, un if-else complet reste lisible là où un ternaire imbriqué devient vite un casse-tête. (Une subtilité : les deux branches doivent partager un type commun, alors ne mélangez pas, par exemple, un string et un int.)

if avec un initialiseur (C++17)

Depuis C++17, vous pouvez déclarer une variable directement dans le if, dont la portée est limitée au if/else. Cela empêche les auxiliaires de courte durée de fuir vers le code environnant :

La partie avant le ; s'exécute une fois et son résultat est visible à la fois dans la condition et dans le else. C'est idéal pour les motifs « calculer une chose, puis brancher dessus » — et parce que la conversion du résultat se produit une seule fois en amont, vous évitez de recalculer ou de réutiliser accidentellement une valeur périmée plus tard. Recourez-y dès qu'une variable temporaire n'est nécessaire que pour la branche.

Un piège : le problème de l'accolade pendante

C++ vous laisse omettre les accolades lorsqu'une branche n'a qu'une seule instruction, mais cela ouvre la porte à un bug subtil — l'indentation ment :

if (loggedIn)
    cout << "Welcome\n";
    cout << "Loading dashboard\n";   // NE fait PAS partie du if !

Seule la première ligne est contrôlée par le if ; la seconde s'exécute toujours, quel que soit loggedIn, malgré ce que suggère l'indentation. Un classique apparenté est le point-virgule égaré : if (x > 0); termine le if avec un corps vide, donc le bloc qui suit s'exécute sans condition. Utilisez toujours des accolades — même pour une seule ligne — et la plupart des erreurs de ce type disparaissent.

Suite : switch

Les chaînes if-else if sont parfaites lorsque chaque branche teste une condition différente. Mais lorsque vous vérifiez une seule valeur par rapport à de nombreuses possibilités fixes — un choix de menu, une énumération, un code de statut — une longue échelle de else if devient répétitive et facile à mal ordonner. L'instruction switch est faite exactement pour cela, et c'est l'objet de la page suivante.

Questions fréquentes

Comment écrit-on une instruction if-else en C++ ?

Placez une condition entre parenthèses après if, le code à exécuter entre accolades et un bloc else facultatif pour le cas où la condition est fausse : if (score >= 60) { cout << "Pass"; } else { cout << "Fail"; }. La condition est convertie en bool, donc tout nombre non nul compte comme vrai et 0 compte comme faux.

Quelle est la différence entre = et == dans une instruction if en C++ ?

== compare deux valeurs pour vérifier leur égalité, tandis qu'un seul = affecte. Écrire if (x = 5) affecte 5 à x puis teste 5 (toujours vrai) — un bug classique. Cela compile avec un simple avertissement, alors activez les avertissements et envisagez d'écrire la constante d'abord : if (5 == x).

Qu'est-ce que l'opérateur ternaire en C++ ?

L'opérateur ternaire condition ? valueIfTrue : valueIfFalse est un if-else compact qui produit une valeur. Par exemple, string label = age >= 18 ? "adult" : "minor"; choisit l'une des deux valeurs. Utilisez-le pour une simple sélection de valeur ; recourez à un if-else complet lorsque chaque branche comporte une vraie logique.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER