1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

c programm: bmi

Dieses Thema im Forum "OS X-Developer" wurde erstellt von tak3, 04.01.09.

  1. tak3

    tak3 Jonathan

    Dabei seit:
    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?
     
  2. Bananenbieger

    Bananenbieger Golden Noble

    Dabei seit:
    14.08.05
    Beiträge:
    24.567
    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.)
     
  3. Samsas Traum

    Samsas Traum Pommerscher Krummstiel

    Dabei seit:
    24.04.08
    Beiträge:
    3.030
    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 ;)
     
  4. tak3

    tak3 Jonathan

    Dabei seit:
    21.01.07
    Beiträge:
    81
    also wärs klüger für jede ausgabe eine einzelne if anweisung zu schreiben ?
     
  5. Bananenbieger

    Bananenbieger Golden Noble

    Dabei seit:
    14.08.05
    Beiträge:
    24.567
    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.
     
  6. MacAlzenau

    MacAlzenau Golden Noble

    Dabei seit:
    26.12.05
    Beiträge:
    19.405
    Der hat einfach zuviel Zeit, seit die EU-Bananenbiegeverordnung abgeschafft worden ist!
     
    Bananenbieger gefällt das.
  7. Scotch

    Scotch Ananas Reinette

    Dabei seit:
    02.12.08
    Beiträge:
    6.244
    Ich würde den case Befehl ins Auge fassen...

    HTH,
    Dirk
     
  8. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Ich nicht, denn der kann weder mit Gleitkommazahlen was anfangen, noch eignet er sich besonders gut zum Testen auf Wertbereiche.

    MacApple
     
    Scotch gefällt das.
  9. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    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
     
  10. tak3

    tak3 Jonathan

    Dabei seit:
    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.:)
     
  11. Bananenbieger

    Bananenbieger Golden Noble

    Dabei seit:
    14.08.05
    Beiträge:
    24.567
    Case würde auch dann nicht gehen, wenn es keine Aufgabe für die Schule wäre :p:-D
     
  12. tak3

    tak3 Jonathan

    Dabei seit:
    21.01.07
    Beiträge:
    81
    kann man kein case mit eingegrenzten bedingungen schreiben ?
     
  13. Bananenbieger

    Bananenbieger Golden Noble

    Dabei seit:
    14.08.05
    Beiträge:
    24.567
    Nope. Mir ist kein Weg bekannt, dies zu tun.
     
  14. tak3

    tak3 Jonathan

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

Diese Seite empfehlen