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).