if, else if, else




Nous allons à présent donner un sens aux opérateurs logiques et relationnels !


La conditionnelle est un test réalisé avec des mots clés comme if et else, if qui peut se traduire par si et else par sinon.


Voici les mots clés les plus utilisés pour gérer une conditionnelle que je vous demande de connaître par coeur :

if

si...

else if 

sinon si...

else 

sinon...


else if n'est pas un mot clé, c'est un mixte des mots clés if et else qui signifie donc sinon si, terriblement logique non ?


Commençons par le mot clé if, je vous présente tout de suite dans un code source son mode d'emploi :

if (/* Votre condition */)
{
    // Instructions...
}



Si (if) la condition est vraie, on exécute les instructions entre des accolades, c'est tout.


Notez que s'il y a une seule instruction dans un bloc (un bloc d'instructions est un ensemble d'instructions délimité par une accolade ouvrante ({) et fermante (})), les accolades deviennent alors facultatives.

Néanmoins, je vous recommande de toujours mettre des accolades pour aérer votre code source.


Écoutez bien ce que je vais vous dire, entre les parenthèses du if (où j'ai écrit Votre condition) vous devez mettre un booléen, c'est à dire, soit 1 (vrai), soit 0 (faux). Ça vous ne rappelle pas quelque chose ? Moi si .


Modifions donc notre code source précédent...

if (/* Votre booléen */)
{
    // Instructions...
}


Observez ce code :

int main()
{
    int monBooleen = 0;

    if (monBooleen)
    {
        printf("La condition est vraie !");
    }
    else
    {
        printf("La condition est fausse !");
    }

    return 0;
}


Comme monBooleen vaut 0, la condition est fausse !


Vous comprenez maintenant l'utilité de else, qui permet d'exécuter des instructions si la condition est fausse.

La condition est fausse !


Modifiez la valeur du booléen et la condition sera vraie .


Vous vous rappelez comment on obtient un booléen ? Avec les opérateurs logiques et relationnels pardi !


Vous souvenez-vous de ce code ?

int main()
{
    int age = 0, majeur = 0;

    printf("Quel age avez-vous ? ");
    scanf("%d", &age);
    majeur = age >= 18; // majeur vaut 1 (est vrai) si age est supérieur ou égal à 18
    printf("\nage = %d\nmajeur = %d", age, majeur);

    return 0;
}


Le booléen majeur variait en fonction de la valeur de age.

Quel age avez-vous ? 17


age = 17

majeur = 0


Essayez maintenant d'afficher du texte à l'écran en fonction de l'âge de l'utilisateur, par exemple, dites à l'utilisateur qu'il est majeur si (if) il a plus de 18 ans et qu'il est mineur sinon (else).


Vous avez réussi ? Bravo, voici mon code source :

int main()
{
    int age = 0, majeur = 0;

    printf("Quel age avez-vous ? ");
    scanf("%d", &age);
    majeur = age >= 18;

    if (majeur)
    {
        printf("Tu es majeur.");
    }
    else
    {
        printf("Tu es mineur.");
    }

    return 0;
}


Cependant, ce n'est pas la bonne méthode, elle n'est pas claire, il faut éviter de déclarer le booléen majeur, on peut directement effectuer l'opération relationnel entre les parenthèses du if :

int main()
{
    int age = 0;

    printf("Quel age avez-vous ? ");
    scanf("%d", &age);

    if (age >= 18)
    {
        printf("Tu es majeur.");
    }
    else
    {
        printf("Tu es mineur.");
    }

    return 0;
}


L'opération relationnel age >= 18 sera remplacé par un booléen à l'exécution (soit 1 pour vrai, soit 0 pour faux).


Le code source est alors beaucoup plus clair est peut être traduit comme ceci, si (if) age est supérieur ou égal (>=) à 18, l'instruction printf est exécutée pour afficher Tu es majeur., sinon (else), une autre instruction printf est exécutée pour afficher Tu es mineur..


Les accolades ({ et }) du if et du else sont inutiles dans ce cas mais il vaut mieux ne pas les oublier pour rendre le code source plus clair.


Tenez, pour le fun, essayez de modifier le code source du chapitre précédent ou on demandait à l'utilisateur une boisson et une viande afin de lui signaler (via un printf) s'il va être obèse ou pas.


C'est parti on ne triche pas... Correction ! Oui déjà

int main()

{

   int boisson = 0, viande = 0;

   printf("Que voulez-vous boire ?\n\n1. Eau\n2. Soda\n\n");

   scanf("%d", &boisson);

   printf("\nQue voulez-vous manger ?\n\n1. Hamburger\n2. Porc\n\n");

   scanf("%d", &viande);

   if (viande == 1 && boisson == 2)

   {

       printf("\nAttention, tu risques de devenir obese !");

   }

   else

   {

       printf("\nTon alimentation est correcte.");

   }

   return 0;

}


Voilà, l'utilisateur va être obèse seulement s'il a choisi le Soda et (&&) le Hamburger.


Ce que vous devais retenir pour le moment sur le if et le else :

  • Le mot clé if se traduit par si. Il s'utilise en insérant un booléen entre ses parenthèses, si ce booléen vaut 1, les instructions entre ses accolades sont exécutées.

  • Si ce booléen vaut 0 et qu'il existe un else (qui se traduit par sinon) à la suite de ce if, les instructions entre ses accolades sont exécutées.


Si vous avez du mal, c'est presque tout à fait normal, essayez alors d'oublier les booléens, les opérateurs relationnels et caetera, dites-vous que dans les parenthèses d'un if, on met une condition remplacée par un booléen lors de l'exécution.


Vous pouvez traduire booléen par condition et 0 et 1 par vrai et faux.


J'essaie de mettre la barre plus haute pour que vous compreniez mieux le principe des conditionnelles.


Passons au mixte else if qui signifie sinon si.


Le else if se place après le if et avant le else (s'il y en a un).


Pour comprendre l'utilité du else if, nous allons imaginer un menu (oui encore), donc une liste de choix.


Pour faire simple, nous allons demander à l'utilisateur son pays ! On pourrait très bien lui demander d'écrire son pays mais on ne sait pas encore le faire (et oui, on ne fait que manipuler des nombres depuis le début), on va donc se contenter d'afficher un menu comme ci-dessous.


Je ne vais pas m'amuser à décrire ce menu mot par mot, voilà donc le menu en console qui vaut beaucoup mieux :

||| VOTRE PAYS |||


1. France

2. Canada

3. Belgique

4. Suisse


Choix : 1


Tu es francais.


Vous pouvez essayer de rédiger le code source en utilisant simplement des if, mais avec else if, c'est différent vous allez voir !


En plus, on a un bon exemple de l'utilisation du else if ici.

int main()
{
    int pays = 0;

    printf("||| VOTRE PAYS |||\n\n1. France\n2. Canada\n3. Belgique\n4. Suisse\n\nChoix : ");
    scanf("%d", &pays);

    if (pays == 1)
    {
        printf("\nTu es francais.");
    }
    else if (pays == 2)
    {
        printf("\nTu es canadien.");
    }
    else if (pays == 3)
    {
        printf("\nTu es belge.");
    }
    else if (pays == 4)
    {
        printf("\nTu es suisse.");
    }
    else
    {
        printf("\nTu es un extraterrestre.");
    }

    return 0;
}


Personnellement, j'avais un peu du mal à comprendre au début, j'ai découvert plus tard que c'était une condensation de ce code source :

if (pays == 1)
{
    printf("\nTu es francais.");
}
else
{
    if (pays == 2)
    {
        printf("\nTu es canadien.");
    }
    else
    {
        if (pays == 3)
        {
             printf("\nTu es belge.");
        }
        else
        {
             if (pays == 4)
             {
                printf("\nTu es suisse.");
             }
             else
             {
                printf("\nTu es un extraterrestre.");
             }
        }
    }
}


Après avoir vu ce code source ci-dessus, j'ai tout de suite tout compris pourquoi else if était un mixte de if et else, j'espère pour vous aussi, ce n'est pas le plus important rassurez-vous .

Notez aussi que dans chaque bloc d'instructions (ici, entre accolades), on écrit nos instructions ou nos blocs d'instructions une tabulation plus loin, c'est une norme, vous n'êtes pas obligé de la respecter mais encore une fois, prenez l'habitude d'aérer votre code source !


Vous voyez donc bien que le else if condensé est plus simple à utiliser, en plus il est plus clair, alors pourquoi s'en priver !


Mais c'est carrément nul ! On peut faire la même chose avec plusieurs if !


Non, c'est faux (c'est cependant une bonne question) !


Ici, on a une seule conditionnelle (du if au else).


Si on avait utiliser que des if, on aurait eu plusieurs conditionnelles, l'avantage principal ici, c'est que le else est exécuté si le if et les else if sont faux, tout est donc condensé dans un ordre logique.


Comment auriez-vous fait le else en utilisant uniquement des if ?


Avec encore un if comme ça  :


if (pays != 1 && pays != 2 && pays != 3 && pays != 4)


Avouez que rien ne vaut quelques else if ici. C'est beaucoup plus clair, rapide à écrire et propre.


Enfin, non ce n'est pas propre, pour le cas d'un menu, le switch est bien mieux !

Créé avec HelpNDoc Personal Edition: Générateur de documentations PDF gratuit