Lorsque l'on veut réaliser une opération (ou une suite d'opérations)
seulement à une certaine condition, on utilise la structure if
(condition) instructions
. Par exemple, pour calculer la valeur
absolue d'une variable entière v
, on écrira
if (v < 0) { v = -v ; }
Ainsi, si v
est négatif, il est remplacé par son
opposé.
La syntaxe générale est
if (condition) { instructions à exécuter si condition est vraie; } else { instructions à exécuter sinon; }
Pour des raisons de clarté, il est utile de décaler tout le bloc à exécuter par rapport au reste.
Les tests sont réalisés avec les opérateurs de comparaison (on ne compare que des variables du même type !) :
inférieur strictement | < |
inférieur ou égal | <= |
égal | == |
différent | != |
supérieur strictement | > |
supérieur ou égal | >= |
Il faut bien prendre garde au test d'égalité qui s'écrit
avec deux signes ==, un seul signe = étant une affectation à
une variable. Par exemple, si on écrit (la variable i étant
de type entière (int
))
if (i = 2) { ... }
on ne provoque pas d'erreur du compilateur (car cela a un sens), mais
cela a pour conséquence d'affecter la valeur 2
à la
variable i
et de regarder ensuite la valeur logique de
l'expression. Dans ce cas, sa valeur logique est 2
, donc
non nulle, ce qui signifie que la condition est réalisée. Finalement,
quelque soit la valeur de i
avant le test, le bloc
d'instructions est toujours exécuté avec i
ayant une
valeur égale à 2
!
L'écriture correcte du test doit bien être
if (i == 2) { ... }
Vu qu'il est très facile de faire cette erreur même avec beaucoup
d'expérience, le compilateur vous prévient si vous avez pensé à lui
demander des conseils avec l'option -Wall
. Pensez y donc
systématiquement!
Il est également possible de faire plusieurs tests simultanés avec les opérateurs "booléens" (ou, et ...). Par exemple si on veut satisfaire deux conditions simultanées: "si (condition1 et condition2) alors ..." s'écrit
if ((condition1) && (condition2)) { ... }
S'il suffit qu'au moins une de deux conditions soit satisfaite: "si (condition1 ou condition2) alors ..." s'écrit:
if ((condition1) || (condition2)) { ... }
On peut enchaîner plusieurs test consécutivement à
l'aide de else if
:
if (condition1) { instructions si condition 1 vraie; } else if (condition2) { instructions si condition 2 vraie; } else if (condition3) { instructions si condition 3 vraie; [...etc...] } else { instructions si aucune condition n'était vraie; }
Dans ce cas, dès qu'une des conditions est réalisée,
le bloc d'instructions associé est exécuté et les tests
suivants ne sont pas réalisés (à cause des else
).