• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

c programm: bmi

tak3

Jonathan
Registriert
21.01.07
Beiträge
81
hey ich bin grad am schreiben einer if-anweisung, leider seh ich grad nicht meinen fehler, vll kann mir hier jemand helfen.

#include <stdio.h>
#include <stdlib.h>

int main ()
{
float bmi, groesse, gewicht;

system("CLS");

printf("Dieses Programm berechnet den BMI");

printf("\nBitte groesse in meter eingeben :\t");
scanf("%f",&groesse);

printf("\nBitte gewicht in kg eingeben :\t");
scanf("%f",&gewicht);

bmi = (gewicht/(groesse*groesse));
system("CLS");

printf("\nIhr BMI: %.2f",bmi);

if (bmi<18.5)
{printf("\n essen!");}
else if (bmi>=18.5)
{printf("\n Normalgewicht");}
else if (bmi>=25)
{printf("\n ohoh^1");}
else if (bmi>=30)
{printf("\n ohoh^2");}
else
{printf("\n ohoh^3");}


system("PAUSE");
return 0;
}


das problem ist die if anweisung gibt bei jedem wert: "normalgewicht" aus. weiss vll jemand wo mein fehler liegt?
 
Ist doch auch klar:

Kommt z.B. ein BMI von 34 heraus, ist BMI>=18.5 wahr, also wird "Normalgewicht" ausgegeben.

Entweder schränkst Du die if-Anweisung ein, also z.B. BMI>=18.5 UND BMI<25. Oder Du sortierst die if-Anweisungen um (zuerst bmi>=30, dann bmi>=25 etc.)
 
Also kenn mich zwar nicht mit C aus, aber denke mal das es kein wesentlicher unterschied ist zu PHP ;) Von daher denke ich das sobald der BMI über 18,5 ist er die anweisung nicht weiter durchläuft, weil z.B. nen BMI von 30 ja auch größer als 18,5 ist.

Edith: War der Biegr wieder schneller ;)
 
also wärs klüger für jede ausgabe eine einzelne if anweisung zu schreiben ?
 
Nein. Dann wäre es wahrscheinlich so, dass bei einem BMI von 26
Code:
Normalgewicht
ohoh^1
ausgegeben wird.

Du musst Dafür sorgen, dass die if-Anweisungen treffend die einzelnen BMI-Kategorien abfragen. Wenn Du z.B. sagst
Code:
else if (bmi >=18.5 && bmi <25)
{printf("\n Normalgewicht");}
sollte das hinhauen. Diese if-Anweisungen trifft nur auf einem BMI zwischen 18.5 und 24.99999999 zu. Wenn also ein BMI >= 25 herauskommt, dann ist die if-Anweisung false und somit wird die nächste if-Anweisung ausgeführt.
 
Hier eine Möglichkeit, wie du die Ausgabe korrekt erhalten kannst:

Code:
int main () { 
	float bmi, groesse, gewicht;
	
	system("CLS");
	
	printf("Dieses Programm berechnet den BMI");
	
	printf("\nBitte groesse in meter eingeben :\t");
	scanf("%f",&groesse);
	
	printf("\nBitte gewicht in kg eingeben :\t");
	scanf("%f",&gewicht);
	
	bmi = (gewicht/(groesse*groesse)); 
	
	system("CLS");
	
	printf("\nIhr BMI: %.2f",bmi);
	
	if (bmi < 18.5)
		printf("\n essen!");
	else if (bmi >= 18.5 && bmi < 25)
		printf("\n Normalgewicht");
	else if (bmi >= 25 && bmi < 30)
		printf("\n ohoh^1");
	else if (bmi >= 30 && bmi < 35)
		// Naja, keine Ahnung, es muss ja auch hier eine obere Grenze geben,
		// damit überhaupt die else-Variante wahr werden könnte...
		printf("\n ohoh^2");
	else
		printf("\n ohoh^3");
	
	
	system("PAUSE");
	
	return 0;
}

grz. ppocket
 
hey thx, war mein fehler das nicht so einzugrenzen. case geht nicht, ist ne aufgabe für die schule.:-)
 
Case würde auch dann nicht gehen, wenn es keine Aufgabe für die Schule wäre :-p:-D
 
kann man kein case mit eingegrenzten bedingungen schreiben ?
 
mh ok, naja egal mir sind beide wege recht. obwohl mir case bei den meisten aufgaben lieber ist^^