Probleme de cin

Fermé
2013jawhara - Modifié le 5 nov. 2019 à 09:19
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 5 nov. 2019 à 09:18
Bonjour,
J'ai essayé de résoudre un exercice qui demande de :
Ecrire un programme qui saisit le poids, la taille, le sexe, et qui calcule l’IMC. En utilisant le
tableau suivant, indiquer l’état de poids (maigreur, poids normal, …).
et j'ai écrit ce code :
#include<iostream>
#include<string>
using namespace std ;
 main(){
 float a,b,imc;
 char  c;
 cout<<"entrez poid:";cin>>a;
 cout<<"entrez taille:";cin>>b;
 cout<<"ecrire si vous etrez un homme ou une femme \n";
 cin>>c;
 
 if(c='femme'){
 imc=(a)/(b*b); 
  if(imc<19){
   cout<<"Maigreur";
  }else if(imc>=19 && imc<24){
   cout<<"Poids normal";
  }else if(imc>=24 && imc<30){
   cout<<"Surcharge pondérale";
  }else if(imc>=30 && imc<40){
   cout<<"Adiposité ";
  }
  if(imc>=40){
   cout<<"Adiposité ";
   }
 }else if(c='homme'){
    imc=(a)/(b*b);
  if(imc<20){
   cout<<"Maigreur";
  }
  if(imc>=20 && imc<25){
   cout<<"Poids normal";
  }
  if(imc>=25 && imc<30){
   cout<<"Surcharge pondérale";
  }
  if(imc>=30 && imc<40){
   cout<<"Adiposité ";
  }
  if(imc>=40){
   cout<<"Adiposité ";
  }
  }else{cout <<"erreur";}
  }

le probleme est dans l'affichage : il me ne laisse pas ecrire femme ou homme
est affiche :

entrez poid:90
entrez taille:1,80
ecrire si vous etrez un homme ou une femme
AdipositÚ
--------------------------------
Process exited after 8.709 seconds with return value 0
Appuyez sur une touche pour continuer...

stp aide moi
A voir également:
  • Character constant too long for its type c
  • Bon cin - Télécharger - Commerce

1 réponse

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
5 nov. 2019 à 09:11
Salut 2013jawhara,

Ton code est difficile à lire car tu n'as pas utilisé les balises de code du forum pour le poster (explications ).

En survolant ton code rapidement, on voit y voit plusieurs problèmes.
  • pour stocker
    "femme"
    ou
    "homme"
    en C++ tu peux utiliser un type
    string
    , pas un type
    char
    qui ne permet de stocker qu'un seul caractère
  • l'opérateur d'égalité est
    ==
    et non pas
    =
    qui est un opérateur d'affectation
  • une chaîne littérale
    "femme"
    est délimitée par des guillemets
    "
    et non pas par des apostrophes (qui servent à délimiter un char)


Corrige déjà ces problèmes, teste ton code corrigé, et si tu as de nouveau un problème que tu n'arrives pas à résoudre, poste ton code rectifié sur le forum avec les balises de code pour qu'il soit correctement posté et en expliquant la nature de ton problème.

Dal
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié le 5 nov. 2019 à 09:19
Note que le fait que le programme compile ne signifie pas qu'il est correct et qu'un compilateur devrait t'alerter de ces problèmes que je t'indique par des avertissements.

Par exemple, g++ avec l'option -Wall compile ton code avec les avertissements suivants :

$ g++ -Wall 36296192.cpp
36296192.cpp:12:7: warning: character constant too long for its type
  if(c='femme'){
       ^~~~~~~
36296192.cpp:26:13: warning: character constant too long for its type
  }else if(c='homme'){
             ^~~~~~~
36296192.cpp:4:6: warning: ISO C++ forbids declaration of ‘main’ with no type [-Wreturn-type]
 main(){
      ^
36296192.cpp: In function ‘int main()’:
36296192.cpp:12:7: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘1701670245’ to ‘'e'’ [-Woverflow]
  if(c='femme'){
       ^~~~~~~
36296192.cpp:12:6: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
  if(c='femme'){
     ~^~~~~~~~
36296192.cpp:26:13: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘1869442405’ to ‘'e'’ [-Woverflow]
  }else if(c='homme'){
             ^~~~~~~
36296192.cpp:26:12: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
  }else if(c='homme'){
           ~^~~~~~~~

Tu ne devrais pas ignorer ces avertissements. Ils t'indiquent des problèmes dans ton code. Tu dois comprendre la raison pour laquelle chaque avertissement se manifeste et corriger ton code jusqu'à ce qu'il compile proprement sans erreurs ni avertissements.
0