Problème dans ce programme
Résolu
machin
-
machin -
machin -
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);
}
}
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
-
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. -
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... -