Wohnflächenberechnungspogramm funktioniert nicht korrekt

AnsgarvS

Grünschnabel
Hallo Leute,

Ich habe ein Pogramm geschrieben, welches die Wohnfläche einer Wohnung berechnen soll. Außerdem sollen die Anzahl der Räume und die durchschnittliche Raumgröße angegeben werden.

Code:
#include<stdio.h>

main(){
    double flaeche,gesamt=0;
    int anzahl=0;

    printf("\n\t\t Berechnung der Wohnflaeche\n");
    printf("\nBeenden der Eingabe mit '0'.\n\n");
    printf("Zimmergroesse in qm > ");
    scanf("%lf",&flaeche);
    while(flaeche > 0.0) {
        gesamt = gesamt + flaeche;
        anzahl = anzahl +1;
        printf("Zimmergroesse in qm > ");
        scanf("%lf",&flaeche);

        printf("\nAnzahl der Zimmer = %i",anzahl);
        printf("\nGesamtflaeche = %.21f qm",gesamt);
        printf("\nDurchschnittliche Zimmergroesse = ");
        printf("%.2lf\n",gesamt/anzahl);
    }
}

Wenn man das Pogramm ausführt passiert folgendes( Eingegebene Zahlen sind Beispiele):

Berechnung der Wohnflaeche

Beenden der Eingabe mit '0'

Zimmergroesse in qm>1
Zimmergroesse in qm> 5

Anzahl der Zimmer = 1
Gesamtflaeche = 1.00000000000000 qm
Durchschnittliche Zimmergroesse = 1.00
Zimmer in qm>

Das Problem ist also dass das Pogramm 2 Größen abfragt,eigentlich soll es erst 1 abfragen und nur eine angibt. Außerdem addiert das Pogramm nicht korrekt.


Berechnung der Wohnflaeche

Beenden der Eingabe mit '0'

Zimmergroesse in qm>1
Zimmergroesse in qm> 5

Anzahl der Zimmer = 1
Gesamtflaeche = 1.00000000000000 qm
Durchschnittliche Zimmergroesse = 1.00
Zimmer in qm>6

Anzahl der Zimmer = 2
Gesamtflaeche = 6.00000000000000 qm
Durchschnittliche Zimmergroesse = 3.00
Zimmer in qm>9

Anzahl der Zimmer = 3
Gesamtflaeche = 12.00000000000000 qm
Durchschnittliche Zimmergroesse = 4.00
Zimmer in qm>0 (Ende)
 
Du möchtest wohl sowas haben:
C++:
#include<stdio.h>
 
main(){
    double flaeche,gesamt=0;
    int anzahl=0;
 
    printf("\n\t\t Berechnung der Wohnflaeche\n");
    printf("\nBeenden der Eingabe mit '0'.\n\n");
    printf("Zimmergroesse in qm > ");
    scanf("%lf",&flaeche);
    while(flaeche > 0.0) {
        gesamt = gesamt + flaeche;
        anzahl = anzahl +1;
        printf("Zimmergroesse in qm > ");
        scanf("%lf",&flaeche);
    }
    printf("\nAnzahl der Zimmer = %i",anzahl);
    printf("\nGesamtflaeche = %.21f qm",gesamt);
    printf("\nDurchschnittliche Zimmergroesse = ");
    printf("%.2lf\n",gesamt/anzahl);
}
Also die Ausgabe aus der Schleife raus.

So werden beliebig viel Zimmer eingelesen,
und mit einer 0 schließt man die EIngaben ab und gibt das Ergebnis aus.

Zuerst wird vor dem while das erste Zimmer eingelesen.
Wenn das schon 0 (Ende) ist, gehts direkt zur Ausgabe weiter.
Sonst wirds in der Schleife zum Gesamten dazugerechnet
und dann wird das zweite Zimmer eingegeben.
Wenn das 0 ist, Ausgabe, sonst geht die Schleife wieder von vorn los,
rechnet das zweite Zimmer zum Gesamten dazu und nimmt die drite Eingabe...

Wenn du, wie vorher, die Ausgabe in der Schleife hast:
Zimmer 1 eingeben, zum Gesamten rechnen, Zimmer 2 eingeben,
und bevor es dazugerechnet ist schon ausgeben...
 
Ich würde da lieber zu einer do-while-Schleife greifen, denn jetzt hat man Coderedundanz drin.
C++:
printf("Zimmergroesse in qm > ");
scanf("%lf",&flaeche);
Das kommt jetzt doppelt vor und das muss nicht sein, denn wenn sich die Aufforderung ändert, dann müsste man das an zwei stellen machen. Und offensichtlich willst du ja, dass der Benutzer auf jeden Fall eine Eingabe macht, ob nun die Fläche oder eine 0 zum Abbrechen.
 
Zurück