Condition else if en C

jason-live Messages postés 219 Date d'inscription   Statut Membre -  
 yaya -
Bonjour, voici mon code :
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int age =0;
    printf("Tapez votre age vous verifier si vous ete majeur!\n");
    scanf ("%d", &age);
    if (age >= 18)
    {
        printf ("Vous ete majeur\n");
    }
    else if (age<18 && age>=11)
    {
        printf ("Vous ete en periode d'adolescence \n");
    }
    else if (age >= 40)
    {
        printf ("Vous commencez a etre vieux !\n");
    }
    else if (age<=10 && age>=3)
    {
        printf ("Vous n etes qu'un enfant ! \n");
    }

    return 0;
}

Quand j'entre le nombre 40 ou + il y a marqué vous êtes majeur or ce n'est pas ce que j'ai demandé dans mon programme :(
Pouvez-vous m'aidez svp merci :D
Configuration: Windows Vista
Firefox 3.5.5

6 réponses

  1. coco_83 Messages postés 760 Statut Membre 127
     
    Salut
    Imaginons que tu aies un groupe de personnes toutes tranches d'âge confondues. Tu vas d'abord demander à tous ceux d'au moins 18 ans de se placer dans une pièce d'où ils ne peuvent sortir. Tu feras la même chose avec ceux entre 11 et 18 dans une autre pièce et ceux entre 3 et 10 dans une troisième pièce. Quand tu appelleras ceux qui ont 40 ans, il n'y aura plus personne car ils seront déjà avec ceux de plus de 18! Il faut donc commencer par appeler ceux qui ont entre 18 et 40 ans non compris, et là les séniors attendront d'être appelés.
    => Si tu entres 40, 40>=18 donc il va exécuter la première condition
    printf ("Vous ete majeur\n");

    Et il va sauter toutes les autres commencées par else. Pour les plus vieux que 40 ans, il faut que tu modifies ta première condition de
    if(age>=18)

    en
    if(age>=18 && age <40)

    pour que si tu rentres 40, il ne prenne pas le 1er bout de code printf("Vous êtes majeur") mais celui réservé aux seniors.
    Voilà, en espérant t'avoir aidé
    coco_83
    2
  2. Blackdam
     
    au lieu d'utiliser tout ces if et else if... pourquoi ne pas utiliser des case vu que c'est des entiers?
    genre :
    switch(age) {
        case (age >=40){
                printf();
        case(age >=18 && age <40) :  
                 printf();
        etc...
    

    ça simplifie le code, la lecture et la compréhension!
    1
    1. Blackdam
       
      edit : je dis peut etre une bétise, je ne me souviens plus si on a le droit de faire comme ça avec des case... :p faut vraiment que je me remette à la prog moi!!
      0
      1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331 > Blackdam
         
        En effet c'est une bêtise. Les case doivent être des entier constants, comme pour les tableaux. Si tu veux vraiment utiliser switch :
        switch( (age>11) + (age>18) + (age>40) + (age>60))
        {
        case 0: (moins de 11)
        case 1: (moins de 18)
        etc.
        }
        0
  3. Mr_Hooligan Messages postés 15 Statut Membre
     
    Bonjour,

    Pourquoi imbrique tu tes IF ?

    Si tu fais des tests successif sans les imbriquer, sa devrait fonctionner peu importe par quelle tranche d'age tu commence.

    Si tu souhaite absolument imbriquer, la solution de coco_83 me paraît bien.

    Mr_Hooligan
    0
  4. coco_83 Messages postés 760 Statut Membre 127
     
    Moi j'évite les switch dans ce genre de cas là, les switch je les réserve aux messages passés dans mon applicaiton (avec les headers). Car on ne sait jamais à quel résultat s'attendre et quand on oublie de mettre default, ben ca foire!
    0
    1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      Jamais eu de souci avec les switch.
      Je ne voi pas où pourrait être le problème, c'est une instruction comme une autre.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. blackdam Messages postés 332 Statut Membre 35
     
    En fait ce qui me gène c'est plutôt tout ces "else if" ... :p je trouve que ça alourdit le code!
    dans ce cas, faire plutôt que des if...
    if (age >= 40)
        {
            printf ("Vous commencez a etre vieux !\n");
        }
    if (age >= 18 && age <40)
        {
            printf ("Vous ete majeur\n");
        }
    if (age<18 && age>=11)
        {
            printf ("Vous ete en periode d'adolescence \n");
        }
     if (age<11 && age>=3)
        {
            printf ("Vous n etes qu'un enfant ! \n");
        }
    
    0
  7. yaya
     
    Bonjour
    Je suis dans un cas assez similaire!!!!
    On m'indique une erreur que je ne comprend pas!!!
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
    int age = 0;
    printf("quel age a tu?\n\n");
    scanf("%d", &age);
    printf("a vous avez %d an\n\n", age);

    if (age >= 18)
    {
    printf("vous ete majeur\n\n");

    }
    else (age <= 18)
    {
    printf("a vous ete mineur");
    }
    return 0;
    }

    (le code fonctionne qvec un ; apres la ligne else)
    merci
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Bonjour,

      Il n'y a pas de condition après un else.
      Si vous mettez : if (age>=18), vous êtes assuré que si la variable age ne respecte pas cette condition alors les instructions du bloc else seront exécutées (donc dans le cas où age<18).

      Cdlt,
      0
    2. yaya
       
      okay merci pour linfo!!!!
      et ya il une condition apres un eslse if?
      0
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Après un if, il y a toujours une condition. En particulier pour "else if".
      0
    4. yaya
       
      okay merci.
      0