• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

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?
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
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.)
 

Samsas Traum

Pommerscher Krummstiel
Registriert
24.04.08
Beiträge
3.025
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 ;)
 

tak3

Jonathan
Registriert
21.01.07
Beiträge
81
also wärs klüger für jede ausgabe eine einzelne if anweisung zu schreiben ?
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
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.
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
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
 

tak3

Jonathan
Registriert
21.01.07
Beiträge
81
hey thx, war mein fehler das nicht so einzugrenzen. case geht nicht, ist ne aufgabe für die schule.:)
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Case würde auch dann nicht gehen, wenn es keine Aufgabe für die Schule wäre :p:-D
 

tak3

Jonathan
Registriert
21.01.07
Beiträge
81
kann man kein case mit eingegrenzten bedingungen schreiben ?
 

tak3

Jonathan
Registriert
21.01.07
Beiträge
81
mh ok, naja egal mir sind beide wege recht. obwohl mir case bei den meisten aufgaben lieber ist^^