Verstehe die Rückgabe meines Programms nicht!

pur3

Grünschnabel
Hi an alle,

ich muss ein Programm schreiben das mir den Verbrauch von Benzin in Liter auf 100 km ausgibt.
Mein Programm sieht folgendermaßen aus:

C++:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int teilstrecke1;
    int teilstrecke2;
    int teilstrecke3;
    int teilstrecke4;
    int anzteilstrecken;
    int gesamtstrecke;
    int getankteliter;
    int verbrauch;

printf("Bitte geben sie die Anzahl der Teilstrecken ein:     ");
scanf("%d", &anzteilstrecken);

printf("Bitte Teilstrecke 1 eingeben:      ");
scanf("%d", &teilstrecke1);

printf("Bitte Teilstrecke 2 eingeben:      ");
scanf("%d", &teilstrecke2);

printf("Bitte Teilstrecke 3 eingeben:      ");
scanf("%d", &teilstrecke3);

printf("Bitte Teilstrecke 4 eingeben:      ");
scanf("%d", &teilstrecke4);

gesamtstrecke = teilstrecke1 + teilstrecke2 + teilstrecke3 + teilstrecke4;
printf("Gesamtstrecke (km):  %d\n", gesamtstrecke);

printf("Bitte geben sie die Anzahl der getankten Liter an:       ");
scanf("%d", &getankteliter);

verbrauch = getankteliter/(gesamtstrecke*100);
printf("Verbrauch (l/100km): %d\n", verbrauch);

return 0;

}

Bis auf den letzten schritt funktioniert alles bestens, aber wenn beim Verbrauch (l/100km) gibt er mir egal was ich eingebe immer die 0 aus!
ich habe keinen plan wieso:( und ich komme nicht drauf:(
könnt ihr mir vll helfen****?

ich danke euch schon im voraus


mfg


alex
 
Zuletzt bearbeitet von einem Moderator:
Du solltest dir angewöhnen, sobald ein Divisionsergebnis in einer Variablen abgelegt werden soll, mit float oder double zu arbeiten.

Bis dann

PS: Verwende doch bitte die Code-Tags [code=cpp][/code], damit man den Code besser lesen kann.
 
okay danke^^ aber ich versteh deine antwort nicht ganz sorry! könntest du es mir nochmal genauer erklären?

das ist aber nicht die lösung meines problems oder?:)

C++:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int teilstrecke1;
    int teilstrecke2;
    int teilstrecke3;
    int teilstrecke4;
    int anzteilstrecken;
    int gesamtstrecke;
    int getankteliter;
    float verbrauch;

printf("Bitte geben sie die Anzahl der Teilstrecken ein:     ");
scanf("%d", &anzteilstrecken);

printf("Bitte Teilstrecke 1 eingeben:      ");
scanf("%d", &teilstrecke1);

printf("Bitte Teilstrecke 2 eingeben:      ");
scanf("%d", &teilstrecke2);

printf("Bitte Teilstrecke 3 eingeben:      ");
scanf("%d", &teilstrecke3);

printf("Bitte Teilstrecke 4 eingeben:      ");
scanf("%d", &teilstrecke4);

gesamtstrecke = teilstrecke1 + teilstrecke2 + teilstrecke3 + teilstrecke4;
printf("Gesamtstrecke (km):  %d\n", gesamtstrecke);

printf("Bitte geben sie die Anzahl der getankten Liter an:       ");
scanf("%d", &getankteliter);

verbrauch = getankteliter/(gesamtstrecke*100);
printf("Verbrauch (l/100km): %f\n", verbrauch);

return 0;

}
 
okay danke^^ aber ich versteh deine antwort nicht ganz sorry! könntest du es mir nochmal genauer erklären?

pur3 hat gesagt.:
das ist aber nicht die lösung meines problems oder?:)

Das Ergebnis einer Divisionsaufgabe ist nur selten ein ganzzahliger Wert. Meistens kommt irgendwas mit Komma raus. Wenn du eine int-Variable erstellst, können dort aber nur ganzzahlige Werte drin gespeichert werden. Wenn ein Wert 0,145 gespeichert werden soll, ist das eben 0 - weil alles nach dem Komma einfach verworfen wird.

Wenn du dir im Klaren darüber bist, ob deine Berechnungsformel korrekt ist, müsstest du auch auf dem Blatt mit einer Beispielrechnung das Ergebnis verifizieren können.

Prinzipiell würde ich aber sagen, das es so berechnet werden muss:

verbrauch = (liter / kilometer) * 100

Ich weiß noch nicht ganz, warum da Kilometer mal 100 (weil Klammer) rechnest. Müsste es nicht anders herum sein? Beispiel:

Ich habe 48 Liter getankt und komme damit 600km weit. Was ist mein Verbrauch auf 100km?

(48 / 600) * 100 = 8

Weil wenn du Liter durch Anzahl gefahrener km teilst, bekommst du den Spritverbrauch pro km (also l/km) zurück. Wenn du aber den Verbrauch für 100km haben willst, musst du das Ergebnis mal 100 nehmen.
 
okay aber er spuckt mir immer noch 0 als ergebnis aus:(

kann es sein des er nicht weiss was er einsetzten soll? sprich das ich was abspeichern muss von meinen ergebnissen?
 
pur3 hat gesagt.:
kann es sein des er nicht weiss was er einsetzten soll? sprich das ich was abspeichern muss von meinen ergebnissen?

Nein, es ist alles da, was man für die Berechnung braucht. Zeig mal aktuellen Code.

PS: bitte bearbeite deine Beiträge und geh nicht immer auf "Antworten".
 
C++:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int teilstrecke1;
    int teilstrecke2;
    int teilstrecke3;
    int teilstrecke4;
    int anzteilstrecken;
    int gesamtstrecke;
    int getankteliter;
    float verbrauch;


printf("Bitte geben sie die Anzahl der Teilstrecken ein:     ");
scanf("%d", &anzteilstrecken);

printf("Bitte Teilstrecke 1 eingeben:      ");
scanf("%d", &teilstrecke1);

printf("Bitte Teilstrecke 2 eingeben:      ");
scanf("%d", &teilstrecke2);

printf("Bitte Teilstrecke 3 eingeben:      ");
scanf("%d", &teilstrecke3);

printf("Bitte Teilstrecke 4 eingeben:      ");
scanf("%d", &teilstrecke4);

gesamtstrecke = teilstrecke1 + teilstrecke2 + teilstrecke3 + teilstrecke4;
printf("Gesamtstrecke (km):  %d\n", gesamtstrecke);


printf("Bitte geben sie die Anzahl der getankten Liter an:       ");
scanf("%d", &getankteliter);

verbrauch = (getankteliter/gesamtstrecke)*100;
printf("Verbrauch (l/100km): %f\n", verbrauch);

return verbrauch;

}

so sieht mein quellcode aus.
 
Versuch es mal mit dieser Berechnung:

C++:
verbrauch = ((float)getankteliter/(float)gesamtstrecke)*100.0;

Hintergrund: Der C-Compiler teilt int durch int, da kommt zwar ein double raus, aber er erkennt das zur Kompile-Zeit nicht. Daher ist für ihn das Ergebnis auch ein int. Durch das sog. Casten - also den Zwang, den int als float zu behandeln, weiß der Compiler, das als Ergebnis auch ein float raus kommen muss. Das Multiplizieren mit einem weiteren float (100.0 ist eine Fließ-Komma-Zahl) ist dann obligatorisch.
 
Bei getankten Litern würde ich nach "%f" scannen, nicht nach "%d"
Wie sehen denn die entsprechenden Ausgaben dazu aus? Kannst du die mal abtippen oder einen Screenshot machen?
 
Zurück