ich bin zur zeit dran mit C+ das Programmieren zu lernen...
Ich habe versucht mir einen BMI Rechner zu programmieren und bin dabei auf folgendes Problem gestoßen...
Meine eigentlich Simple Formel berechnet nicht den erwartenden Wert...
Formel: (10000*Gewicht)/(Größe*Größe) // Gewicht und Größe sind Variablen
z.b. gebe ich Werte ein für; Gewicht= 80 und Größe = 180
Mit dem Taschenrechner komme ich auf das Ergebnis 24,7 aber mein Programm rechnet 281,25 aus!
Ich könnte mir vorstellen, dass das Problem wegen der Division der float-variablen zustande kommt... Ich habe diesbezüglich auch schon etwas recherchiert... Leider ohne Erfolg.
Ich hoffe jemand kann mir helfen. Quellcode ist im Spoiler.
char text1[]="Body Mass Index Rechner\n\n";
char text2[]="Ihr Gewicht in kg:";
char text3[]="Ihre Gr\x94se in cm:";
char text4[]="Ihr Geschlecht (0=Frau, 1=Mann):";
int main (void)
{
printf(text1);
printf(text2); scanf_s ("%f", &gewicht);
printf(text3); scanf_s ("%f", &groese);
printf(text4); scanf_s ("%d", &geschlecht);
int main (void) { float gewicht, groese; int geschlecht; float ergebnis; char text1[]="Body Mass Index Rechner\n\n"; char text2[]="Ihr Gewicht in kg:"; char text3[]="Ihre Gr\x94se in cm:"; char text4[]="Ihr Geschlecht (0=Frau, 1=Mann):";
das fördert ungemein die lesbarkeit deines prgrammcodes. beachte, ich habe (u.a.) deine globalen variablen als lokale variablen von main() deklariert. gewöhne dir bitte so früh wie möglich ab globale variablen zu verwenden!
zum andern ist dein code standard C. kein c++ sprachmerkmal für mich erkennbar. aber egal, c++ ist ja abwärtskompatibel.
da mein cygwin-gcc gerade buggy ist, und ich jetzt keinen bock habe deinetwegen linux zu starten, allgemeine ratschläge:
a) per cout (c++) oder eben printf in bmi() die eingabe-parameter ausgeben, um zu schaun, ob auch die erwarteten parameter an die funktion übergeben werden.
b) die ausgabe der bmi-auswertung auch in eine funktion auslagern, und da per switch
m/w zu unsterscheiden. so brauchst du kein einziges else. 9-fach geschachtelte if-cascaden sind sehr schwer les- bzw. wartbar.