Nous avons vu comment créer des variables, nous allons maintenant nous intéresser aux conditions. Elles permettent de tester des variables. Sans conditions, nos programmes informatiques feraient toujours la même chose !
Utilisez des conditions if... else
On peut par exemple dire :
"si la variable machin est égale à 50, fais ceci."
Mais ce serait dommage de ne pouvoir tester que l'égalité ! Il faudrait aussi pouvoir tester si la variable est inférieure à 50, inférieure ou égale à 50, supérieure, supérieure ou égale… Ne vous inquiétez pas, le C a tout prévu !
Avant de voir comment on écrit une condition de type if... else
en C, il faut donc que vous connaissiez les symboles de base. Voici un tableau récapitulatif à connaître par cœur :
Symbole | Signification |
---|---|
== | est égal à |
> | est supérieur à |
< | est inférieur à |
>= | est supérieur ou égal à |
<= | est inférieur ou égal à |
!= | est différent de |
Ouvrez une condition avec un if
Nous allons faire un test simple, qui va dire à l'ordinateur :
"SI la variable vaut ça, ALORS fais ceci".
Commencez par écrire
if
.Ouvrez des parenthèses (à l'intérieur de ces parenthèses on écrit une condition).
Ouvrez une accolade
{
et fermez-la un peu plus loin}
. Tout ce qui se trouve à l'intérieur des accolades sera exécuté uniquement si la condition est vérifiée.
Cela nous donne :
if (/* Votre condition */)
{
// Instructions à exécuter si la condition est vraie
}
À la place de mon commentaire "Votre condition", on va écrire une condition pour tester une variable. Pour s'entraîner, on va tester si vous êtes majeur avec une variable age
, c'est-à-dire "vous êtes majeur si votre âge est supérieur ou égal à 18" :
if (age >= 18)
{
printf ("Vous etes majeur !");
}
Si vous voulez tester les codes précédents pour voir comment le if
fonctionne, il faudra placer le if
à l'intérieur d'une fonction main
, et ne pas oublier de déclarer une variable age
à laquelle on donnera la valeur de notre choix :
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int age = 20;
if (age >= 18)
{
printf ("Vous etes majeur !\n");
}
return 0;
}
Ici, la variable age
vaut 20, donc le "Vous êtes majeur !" s'affichera.
Essayez de changer la valeur initiale de la variable pour voir. Mettez par exemple 15 : la condition sera fausse, et donc "Vous êtes majeur !" ne s'affichera pas cette fois.
Exécutez une instruction alternative avec else
Maintenant, allons plus loin : si le test n'a pas marché (il est faux), on va dire à l'ordinateur d'exécuter d'autres instructions.
En français, nous allons donc écrire quelque chose qui ressemble à :
"SI la variable vaut ça, ALORS fais ceci,
SINON fais cela".
Il suffit de rajouter else
après l'accolade fermante du if
:
if (age >= 18) // Si l'âge est supérieur ou égal à 18
{
printf ("Vous etes majeur !");
}
else // Sinon...
{
printf ("Ah c'est bete, vous etes mineur !");
}
Si la variable age
est supérieure ou égale à 18, on affiche le message "Vous êtes majeur !", sinon on affiche "Vous êtes mineur".
Conditionnez l'instruction alternative avec else if
Il est possible de faire un autre test si le premier test n'a pas marché. On demande alors à l'ordinateur :
"SI la variable vaut ça ALORS fais ceci,
SINON SI la variable vaut ça ALORS fais ça,
SINON fais cela".
else if
( ou "sinon si") se place entre le if
et le else
:
if (age >= 18) // Si l'âge est supérieur ou égal à 18
{
printf ("Vous etes majeur !");
}
else if ( age > 4 ) // Sinon, si l'âge est au moins supérieur à 4
{
printf ("Bon t'es pas trop jeune quand meme...");
}
else // Sinon...
{
printf ("Aga gaa aga gaaa"); // Langage bébé, vous pouvez pas comprendre
}
L'ordinateur fait les tests dans l'ordre :
D'abord il teste le premier
if
: si la condition est vraie, alors il exécute ce qui se trouve entre les premières accolades.Sinon, il va au « sinon si » et fait à nouveau un test : si ce test est vrai, alors il exécute les instructions correspondantes entre accolades.
Enfin, si aucun des tests précédents n'a marché, il exécute les instructions du « sinon ».
On peut donc écrire :
SI la variable vaut ça,
ALORS fais ceci,
SINON SI la variable vaut ça ALORS fais ça,
SINON SI la variable vaut ça ALORS fais ça,
SINON SI la variable vaut ça ALORS fais ça,
SINON fais cela.
Vous avez encore quelques doutes sur l’utilisation du if, else if et else ? Pas de panique, dans la vidéo suivante, nous revoit tout, étape par étape :
Testez plusieurs conditions à la fois
Il peut aussi être utile de faire plusieurs tests à la fois dans votre if
.
Pour cela, il va falloir utiliser de nouveaux symboles :
Symbole | Signification |
---|---|
| ET |
| OU |
| NON |
Ajoutez une contrainte "ET" avec &&
On peut vouloir tester si l'âge est supérieur à 18 ET si l'âge est inférieur à 25.
Pour cela, il vous faudra écrire :
if (age > 18 && age < 25)
Ajoutez une contrainte "OU" avec ||
Imaginons un programme qui décide si une personne a le droit d'ouvrir un compte en banque. Pour ouvrir un compte en banque, il vaut mieux ne pas être trop jeune, ou bien avoir beaucoup d'argent. Notre test pourrait être :
if (age > 30 || argent > 100000)
{
printf("Bienvenue chez PicsouBanque !");
}
else
{
printf("Hors de ma vue, miserable !");
}
Ce test n'est valide que si la personne a plus de 30 ans ou si elle possède plus de 100 000 euros !
Testez l'opposée d'une condition avec !
Vous devez mettre ce signe avant votre condition pour dire « si cela n'est pas vrai » :
if (!(age < 18))
Cela pourrait se traduire par « si la personne n'est pas mineure ».
Et puisqu'on y est, je voudrais vous lister quelques erreurs courantes du débutant.
Évitez de faire ces erreurs
Faites des conditions de type vrai/faux avec les booléens
Avant d'entrer dans les explications, voici un code source que je vous propose de tester :
if (1)
{
printf("C'est vrai");
}
else
{
printf("C'est faux");
}
Résultat :
C'est vrai
Mais… Il n'y a pas de condition dans le if
, juste un nombre. Qu'est-ce que ça veut dire ?
Si, ça en a, vous allez comprendre. Faites un autre test en remplaçant 1 par 0 :
if (0)
{
printf("C'est vrai");
}
else
{
printf("C'est faux");
}
Résultat :
C'est faux
Faites maintenant d'autres tests en remplaçant le 0 par n'importe quel autre nombre entier, comme 4, 15, 226, ou encore -10.
Qu'est-ce qu'on vous répond à chaque fois ? On vous répond : « C'est vrai ».
Ci-dessous, le test que vous faites est age >= 18
.
if (age >= 18)
Par exemple, si age
vaut 23, alors le test est vrai, et l'ordinateur remplace, en quelque sorte, age >= 18
par 1. Ensuite, l'ordinateur obtient (dans sa tête) un if (1)
. Quand le nombre est 1, comme on l'a vu, l'ordinateur dit que la condition est vraie, donc il affiche « C'est vrai » ! Si la condition est fausse, il remplace age >= 18
par le nombre 0, et du coup la condition est fausse : l'ordinateur va lire les instructions du else
.
Testez maintenant autre chose : envoyez le résultat de votre condition dans une variable, comme si c'était une opération (car pour l'ordinateur, c'est une opération !).
int age = 20;
int majeur = 0;
majeur = age >= 18;
printf("Majeur vaut : %d\n", majeur);
Comme vous le voyez, la condition age >= 18
a renvoyé le nombre 1 car elle est vraie. Du coup, notre variable majeur
vaut 1 (on vérifie d'ailleurs cela grâce à un printf
qui montre bien qu'elle a changé de valeur).
Faites le même test en mettant age == 10
, par exemple. Cette fois, majeur
vaudra "0".
En langage C, il n'existe pas de type de variable "booléen". Donc, on est obligé d'utiliser un type entier comme int
pour gérer les booléens.
Souvent, on fera un test if
sur une variable booléenne :
int majeur = 1;
if (majeur)
{
printf("Vous etes majeur !");
}
else
{
printf("Vous etes mineur");
}
Comme majeur
vaut "1", la condition est vraie, donc on affiche "Vous êtes majeur !".
Ce qui est très pratique, c'est que la condition peut être lue facilement par un être humain. On voit if (majeur)
, ce qui peut se traduire par "si vous êtes majeur". Les tests sur des booléens sont donc faciles à lire et à comprendre, pour peu que vous ayez donné des noms clairs à vos variables.
Tenez, voici un autre test imaginaire :
if (majeur && vaccin)
Ce test signifie "si vous êtes majeur ET que vous êtes vacciné".
vaccin
est une autre variable booléenne qui vaut "1" si vous êtes vacciné, et "0" si vous ne l'êtes pas ! Bravo, vous avez tout compris !
Petite question : si on fait le test if (majeur == 1)
, ça marche aussi, non ?
Tout à fait. Mais le principe des booléens, c'est justement de raccourcir l'expression du if
, et de la rendre plus lisible. Avouez que if (majeur)
ça se comprend très bien, non ?
Optimisez votre code avec la condition switch
if... else
est le type de condition le plus souvent utilisé car il permet de gérer tous les cas. En fait, il n'y a pas 36 façons de faire une condition en C.
Cela dit, if... else
peut s'avérer quelque peu… répétitif. Prenons cet exemple :
if (age == 2)
{
printf("Salut bebe !");
}
else if (age == 6)
{
printf("Salut gamin !");
}
else if (age == 12)
{
printf("Salut jeune !");
}
else if (age == 16)
{
printf("Salut ado !");
}
else if (age == 18)
{
printf("Salut adulte !");
}
else if (age == 68)
{
printf("Salut papy !");
}
else
{
printf("Je n'ai aucune reponse pour ton age");
}
Construisez un switch
Pour éviter d'avoir à faire des répétitions quand on teste la valeur d'une seule et même variable, il existe une autre structure que if... else
. Elle s'appelle switch
!
Voici un switch
basé sur l'exemple qu'on vient de voir :
switch (age)
{
case 2:
printf("Salut bebe !");
break;
case 6:
printf("Salut gamin !");
break;
case 12:
printf("Salut jeune !");
break;
case 16:
printf("Salut ado !");
break;
case 18:
printf("Salut adulte !");
break;
case 68:
printf("Salut papy !");
break;
default:
printf("Je n'ai aucune reponse pour ton age");
break;
}
Le principe est le suivant :
Vous écrivez
switch (maVariable)
pour dire « je vais tester la valeur de la variablemaVariable
».Vous ouvrez ensuite des accolades que vous refermez tout en bas.
À l'intérieur de ces accolades, vous gérez tous les cas :
case 2
,case 4
,case 5
,case 45
…
Enfin, le cas default
correspond au else
qu'on connaît bien maintenant. Si la variable ne vaut aucune des valeurs précédentes, l'ordinateur ira lire le default
.
À vous de jouer !
Je crois que le moment est venu de pratiquer un peu !
En console, pour faire un menu, on fait des printf
qui affichent les différentes options possibles. Chaque option est numérotée, et l'utilisateur doit entrer le numéro du menu qui l'intéresse.
Voici par exemple ce que la console devra afficher :
=== Menu === 1. Royal Cheese 2. Mc Deluxe 3. Mc Bacon 4. Big Mac Votre choix ?
Votre mission (si vous l'acceptez) :
Reproduire ce menu à l'aide de
printf
.Ajouter un
scanf
pour enregistrer le choix de l'utilisateur dans une variablechoixMenu
.Faire un
switch
pour dire à l'utilisateur "tu as choisi le menu Royal Cheese", par exemple.
Alors, vous avez réussi ?
Je vous propose une correction dans ce screencast, et nous allons aussi pouvoir voir en bonus les bonnes pratiques pour correctement mettre en place un switch case :
Découvrez les conditions condensées : les ternaires
Comme un exemple vaut mieux qu'un long discours, je vais vous donner deux fois la même condition :
La première avec un
if... else
.Et la seconde, identique, mais sous forme d'une expression ternaire.
1. Analysez cette condition en if... else
Exemple : on a une variable booléenne majeur
qui vaut vrai (1) si on est majeur, et faux (0) si on est mineur. On veut changer la valeur de la variable age
en fonction du booléen, pour mettre "18" si on est majeur, "17" si on est mineur. C'est un exemple complètement stupide, je suis d'accord, mais ça me permet de vous montrer comment on peut se servir des expressions ternaires.
Voici comment faire cela avec un if... else
:
if (majeur)
age = 18;
else
age = 17;
2. Analysez cette même condition en ternaire
Voici un code qui fait exactement la même chose que le précédent, mais sous forme ternaire :
age = (majeur) ? 18 : 17;
Ici la condition est tout simplementmajeur
, mais ça pourrait être n'importe quelle condition plus longue, bien entendu.
Un autre exemple ?
autorisation = (age >= 18) ? 1 : 0;
Le point d'interrogation permet de dire « est-ce que tu es majeur ? ». Si oui, alors on met la valeur 18 dans age
. Sinon (le :
signifie else
ici), on met la valeur 17.
En résumé
Les conditions sont à la base de tous les programmes. C'est un moyen pour l'ordinateur de prendre une décision en fonction de la valeur d'une variable.
Les mots-clés
if
,else if
,else
signifient respectivement « si », « sinon si », « sinon ». On peut écrire autant deelse if
que l'on veut.Un booléen est une variable qui peut avoir deux états : vrai (1) ou faux (0) (toute valeur différente de 0 est en fait considérée comme « vraie »). On utilise des
int
pour stocker des booléens, car ce ne sont en fait rien d'autre que des nombres.Le
switch
est une alternative auif
quand il s'agit d'analyser la valeur d'une variable. Il permet de rendre un code source plus clair si vous vous apprêtez à tester de nombreux cas. Si vous utilisez de nombreuxelse if
, c'est en général le signe qu'unswitch
serait plus adapté pour rendre le code source plus lisible.Les ternaires sont des conditions très concises qui permettent d'affecter rapidement une valeur à une variable en fonction du résultat d'un test. On les utilise avec parcimonie, car le code source a tendance à devenir moins lisible avec elles.
Si vous avez compris les structures conditionnelles, je vous attends au chapitre suivant. Sinon, c’est reparti pour un tour avec ce chapitre !