Problème dans ce programme

Résolu/Fermé
machin - 24 nov. 2012 à 14:45
 machin - 27 nov. 2012 à 16:22
Bonjour,
Je viens de terminer la création d'un logiciel pour calculer l'IMC. A ma grande surprise, l'ordinateur affiche le bon IMC, mais pas la phrase correspondante ! Pouvez vous m'aider à trouver la source du problème ? Cordialement, voici le code source :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{

double poids = 0;
double taille = 0;
double resultat1 = 0;
double resultat2 = 0;

printf("Entrez votre taille en m : ");
scanf("%lf", &taille);
printf("Entrez votre poids en kg : ");
scanf("%lf", &poids);

resultat1 = taille * taille;

resultat2 = poids / resultat1;


if (resultat2 <= 16,5)
{
printf("Votre IMC est de %lf. Vous etes en famine. Il va quand meme falloir penser a se nourrir !", resultat2);
}
else if (resultat2 <= 18,5 || resultat2 > 16,5)
{
printf("Votre IMC est de %lf. Vous etes maigre. C'est triste.", resultat2);
}
else if (resultat2 <= 25 || resultat2 > 18,5)
{
printf("Votre IMC est de %lf. Vous etes normal. Restez comme ça, c'est parfait !", resultat2);
}
else if (resultat2 <= 30 || resultat2 > 25)
{
printf("Votre IMC est de %lf. Vous etes en surpoids. Lachez ce paquet de chips et tout ira mieux.", resultat2);
}
else if ( resultat2 <= 35 || resultat2 > 30)
{
printf("Votre IMC est de %lf. Vous etes en obesite moderee.", resultat2);
}
else if (resultat2 <= 40 || resultat2 > 35)
{
printf("Votre IMC est de %lf. Vous etes en obesite severe.", resultat2);
}
else
{
printf("Votre IMC est de %lf. Vous etes en obesite morbide.", resultat2);
}

}

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
24 nov. 2012 à 16:26
Bonjour,

printf("Votre IMC est de %lf. V...)
Ce n'est pas de %lf qu'il faut mettre dans tes printf, mais des %f.

else if (resultat2 <= 18,5 || resultat2 > 16,5)
Si le compilateur teste la condition du if c'est que resultat2 > 16.5 (condition contraire à ton if initial). Donc ton programme rentrera systématiquement dans cette partie.
Tu t'es mélangé les pinceaux entre OU et ET (&&). Change, ça devait être mieux. De plus, tu peux simplifier en : else if (resultat2 <= 18,5) tout simplement. Je te laisse corriger le reste.

Et enfin tu as oublié le return 0; final.
1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
24 nov. 2012 à 17:33
D'ailleurs, en plus de mes remarques.
Ce n'est pas 18,5 qu'il faut mettre mais 18.5. De même pour tous les doubles de ton programme.
0
p3t3r42 Messages postés 74 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 2 février 2014 28
Modifié par p3t3r42 le 24/11/2012 à 16:34
Bonjour,
Je pense que l'erreur viens des conditions ou plus précisément du OU
||

Si j'ai bien compris, le message dépend de l'intervalle auquel appartient l'IMC calculé, donc on doit avoir :
IMC appartient à un intervalle [min; max], ce qui revient à dire : min <= IMC ET IMC <= max
Cela donne dans le code:
if (resultat2 <= 16,5)  
{  
printf("Votre IMC est de %lf. Vous etes en famine. Il va quand meme falloir penser a se nourrir !", resultat2);  
}  
else if (resultat2 <= 18,5 && resultat2 > 16,5)  
{  
printf("Votre IMC est de %lf. Vous etes maigre. C'est triste.", resultat2);  
}  
// etc... 


Je permet de faire une autre remarque, il est possible ici de faire:
if (resultat2 <= 16,5)  
{  
printf("Votre IMC est de %lf. Vous etes en famine. Il va quand meme falloir penser a se nourrir !", resultat2);  
}  
else if (resultat2 <= 18,5)  
{  
printf("Votre IMC est de %lf. Vous etes maigre. C'est triste.", resultat2);  
}  
else if (resultat2 <= 25)  
{  
printf("Votre IMC est de %lf. Vous etes normal. Restez comme ça, c'est parfait !", resultat2);  
}  
// etc... 

En effet, si l'IMC est inférieur à 16.5 il affiche le premier message, sinon il teste la condition du else if suivante et ainsi de suite, ce qui revient au même...
0
Merci à tous, ça fonctionne.
0