Condition else if en C

Fermé
jason-live Messages postés 178 Date d'inscription mardi 1 septembre 2009 Statut Membre Dernière intervention 26 décembre 2009 - 9 nov. 2009 à 07:02
 yaya - 12 oct. 2010 à 13:47
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

6 réponses

coco_83 Messages postés 711 Date d'inscription mercredi 2 mai 2007 Statut Membre Dernière intervention 27 octobre 2011 127
9 nov. 2009 à 07:34
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
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
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
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297 > Blackdam
9 nov. 2009 à 09:59
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
Mr_Hooligan Messages postés 15 Date d'inscription dimanche 8 novembre 2009 Statut Membre Dernière intervention 20 novembre 2009
9 nov. 2009 à 09:12
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
coco_83 Messages postés 711 Date d'inscription mercredi 2 mai 2007 Statut Membre Dernière intervention 27 octobre 2011 127
9 nov. 2009 à 18:09
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
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
10 nov. 2009 à 08:07
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
blackdam Messages postés 327 Date d'inscription lundi 19 février 2007 Statut Membre Dernière intervention 13 février 2015 35
9 nov. 2009 à 19: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
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
12 oct. 2010 à 12:34
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
okay merci pour linfo!!!!
et ya il une condition apres un eslse if?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
12 oct. 2010 à 13:46
Après un if, il y a toujours une condition. En particulier pour "else if".
0
okay merci.
0