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);
}
}
A voir également:
- Problème dans ce programme
- Programme demarrage windows - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Mettre en veille un programme - Guide
- Message programmé iphone - Guide
- Programme word gratuit - Guide
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.
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:
Je permet de faire une autre remarque, il est possible ici de faire:
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...
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...
Ce n'est pas 18,5 qu'il faut mettre mais 18.5. De même pour tous les doubles de ton programme.