c++ auswahl

also das programm soll den BMI berechnen und je nach geschlecht und berechnetem BMI übergewicht,normalgewicht... ausgeben. normalgewicht m bzw. normalgewicht w im programm bzw. in der ausgabe ist nur zur erleichterung ob die auswahl richtig funktioniert. folgendes problem wenn ich bei der geschlechterabfrage 'm' für männlich eingebe, gibt er mir trotzdem die weiblichen ergebnisse aus, zu erkennen an dem 'w' hinter normalgewicht, übergewicht usw. das programm geht also den weiblichen weg. verstanden? ich hoffe der quelltext erklärt auch einiges oder einfach mal programm testen um zu sehen was ich meine.
ist mit dem konsolen-experten unter c++ builder 5 programmiert.
danke.

Code:
#include<iostream.h>
#include<conio.h>

int main()
{
 float groesse,bmi,gewicht;
 char wahl,m,geschlecht;
 do
 {
 cout<<"Koerpergroesse?" <<endl; cin>>groesse;
 cout<<"Gewicht in kg?" <<endl; cin>>gewicht;
 cout<<"Geschlecht m oder w" <<endl; cin>>geschlecht;
 bmi=gewicht/(groesse*groesse);
 {
 if(geschlecht == m)       //männlich
    {
    if (bmi<20)
         cout<<"untergewicht m"<<endl;
    if (bmi>20&&bmi<25)
         cout<<"normalgewicht m"<<endl;
    if (bmi>25&&bmi<30)
         cout<<"uebergewicht m"<<endl;
    if (bmi>30)
         cout<<"bedenklich m"<<endl;
    }
  else                    //weiblich
      {
      if (bmi<18)
         cout<<"untergewicht w"<<endl;
      if (bmi>18&&bmi<24)
         cout<<"normalgewicht w"<<endl;
      if (bmi>24&&bmi<30)
         cout<<"uebergewicht w"<<endl;
      if (bmi>30)
         cout<<"bedenklich w" <<endl;
      }   
  }


       cout<<"programm mit 'e' beenden" <<endl;
       cout<<"mit beliebiger taste fortfahren";
       cin>>wahl;
  } while(wahl!='e');     //neustart
 }
 
HI

habs kurz mal überflogen:

du musst ein char folgendermaßen vergleichen.

if (geschlecht == 'm')

Also das m in Hochkomma setzen, dann müsste dein Programm laufen.
 
danke. jetz funktionierts wirklich.

aber noch eine frage. ich möchte erzwingen das nur sinnvolle antworten möglich sind. ich habe das bei der körpergröße und dem gewicht mit einer do-while-schleife gemacht. so will ich das jetz bei der geschlechterauswahl auch machen nur weiß ich nicht wie.

Code:
do
 {
 cout<<"Koerpergroesse in m (Eingabe nur zwischen 0.9 und 2.5)?" <<endl;
 cin>>groesse;
 }while(groesse<0.9 || groesse>2.5);

und bei der geschlechterwahl ???
so dachte ich mir das aber das geht nicht. es geht alles außer 'm' und 'w'. ?(

Code:
 do
 {
 cout<<"Geschlecht maennlich (m) oder weiblich (w)?" <<endl;
 cin>>geschlecht;
 }while(geschlecht=='m' || geschlecht=='w');
 
ok es funktioniert, aber ich versteh einfach nicht warum. genau so wenig verstehe ich warum das (ich meine den code)...
Code:
do
 {
 cout<<"Koerpergroesse in m (Eingabe nur zwischen 0.9 und 2.5)?" <<endl;
 cin>>groesse;
 }while(groesse<0.9 || groesse>2.5);

...so funtioniert. die wiederholung "tut" das während groesse kleiner als 0,9 ist oder größer als 2,5. dabei soll es doch nur möglich werte zwischen 0,9 und 2,5 einzutragen. vielleicht kapier ich die logik dahinter nicht oder es gibt einfach keine und es funktioniert einfach so. trrotzdem wäre es nett wenn mir das jemand erklären könnte. danke mein programm funktioniert jetzt richtig gut und das nur wegen der guten hilfe.
 
die schleife läuft, solange die bedingung erfüllt ist. und die schleife soll solange laufen, solange die eingabe noch nicht richtig ist und damit den benutzer zur erneuten eingabe auffordern. damit musst du als bedingung einen logischen ausdruck einsetzen, der den wert true ergibt (also die aussage erfüllt ist), wenn die eigegebenen werte nicht korrekt sind. damit ergibt sich, dass die eine schleife solange laufen soll, solange der eingegebene wert kleiner 0.9 _oder_ größer als 2.5 ist, was du auch korrekt umgesetzt hast. für die andere schleife ergibt sich, dass die laufen soll, wenn der eingegebene buchstabe _nicht_ gleich 'm' _und_ _nicht_ gleich 'w' ist. das ist auch genau das, was dir lesco angegeben hat.
 
Zurück
Oben