Seite 1 von 1

C++ Problem

Verfasst: 13.12.2004, 13:34
von Dexter
Hi,

habe mích mal wieder an c++ gewagt.

Ergebnis:

//Benzinrechner

#include<iostream>
#include<iomanip>
using namespace std;

int main ()
{
cout.precision (2);
cout.setf(ios::fixed);

float zahl_1,zahl_2,zahl_3,ergeb;

cout<<"\n***Verbrauchsrechner***\n\n";

cout<<"Bitte die gefahrenden Kilometer eingeben: ";
cin>>zahl_1;
cout<<"Bitte die getankten Liter eingeben: ";
cin>>zahl_2;
cout<<"Bitte den sonst ueblichen Durchschnittsverbrauch eingeben: ";
cin>>zahl_3;
{
ergeb=zahl_2*100/zahl_1;
cout<<"\n\n"<<"Der Schnitt ist "<<ergeb<<" Liter je 100KM"<<"\n\n";


switch (ergeb<=zahl_3+0.5,ergeb>=zahl_3-1)
{
case 1:cout<<"\nVerbrauch OK!\n\n";
}
switch (ergeb<zahl_3-2)
{
case 1:cout<<"\nMachst du einen auf Fred Feuerstein?\n\n";
}
switch (ergeb>=zahl_3+1)
{
case 1:cout<<"\nDer Verbrauch ist zu Hoch.\n\n";
}
switch (ergeb>=zahl_3+2)
{
case 1:cout<<"\nDu solltest bald eine Werkstatt besuchen.\n\n";
}
}
system("Pause");
return 0;
}


mit der fettgeschriebenen Zeile habe ich aber so ein kleines Problem, egal was und wie ich es dort schreibe, der erste Teil wird ignoriert. Also selbst bei einem Verbrauch von 15 bei 7 sonst üblichen kommter Spruch "Verbrauch OK."

Verfasst: 13.12.2004, 13:54
von spalter
Yeah Baby, ich hab mich das letzte Mal vor einem Jahr mit C++ beschäftigt und bin stolz drauf, dass ich Deinen Quellcode noch raffe :D
Was benutzt Du für nen Compiler? Borland?

Eine Sache verstehe ich allerdings nicht:

switch (ergeb<=zahl_3+0.5,ergeb>=zahl_3-1)
{
case 1:cout<<"\nVerbrauch OK!\n\n";
}
switch (ergeb<zahl_3-2)
{
case 1:cout<<"\nMachst du einen auf Fred Feuerstein?\n\n";
}
switch (ergeb>=zahl_3+1)
{
case 1:cout<<"\nDer Verbrauch ist zu Hoch.\n\n";
}
switch (ergeb>=zahl_3+2)
{
case 1:cout<<"\nDu solltest bald eine Werkstatt besuchen.\n\n";
}
}
system("Pause");
return 0;
}

Was bewirkt diese Rechnung (also das fettgedruckte)?

Verfasst: 13.12.2004, 14:34
von Dexter
Compiler DEV-C++

Wenn der Ergebnis zwischen Eingabe (zahl_3) +0,5 und -1,0 liegt soll "Verbrauch OK!" kommen. Kommt auch, nur eben auch wenn das Ergebnis noch oben außerhalb der "Parameter liegt". Nach unten hinfunktioniert es aber, bei ergeb<zahl_3-2 kommt nur der Feuersteinspruch.

Verfasst: 13.12.2004, 14:40
von Anstoss Player
setze mal ordentlich Klammern, das kann manchmal hilfreich sein

Verfasst: 13.12.2004, 15:01
von Dexter
Wo und warum soll ich zusätzliche Klammern setzen?

Verfasst: 13.12.2004, 15:15
von Anstoss Player
naja, unser Programmiermeister hat immer gemeint: Lieber mehr Klammern als zu wenig. Und tatsächlich sind manchmal Klammern an Stellen notwendig gewesen, wo man sich das nie gedacht hätte (weils eigentlich nach der Logik überflüssig wär)

Verfasst: 13.12.2004, 15:32
von spalter
Unser Programmiermeister sagte zum Thema Klammern immer: "So viele wie nötig, so wenig wie möglich!"

Verfasst: 13.12.2004, 17:45
von Dexter
ich wüsste nur nicht wo.

Im Prinzip funktioniert es ja, nur das irgendwie "der 1. Teil" des fettgeschriebenen nicht umgesetzt wird. Tausche ich beide, werden die letzten beiden richtig angezeigt, dafür taucht dann aber bei Fred Feuerstein der Satz "Verbrauch OK!"

Verfasst: 16.12.2004, 18:21
von Dexter
switch (ergeb<=zahl_3+0.5 + ergeb>=zahl_3-1)

es funktioniert so wie es mir gedacht hatte

Verfasst: 17.12.2004, 17:37
von Anstoss Player
ich vom c++ auch nur wenig Ahnung, aber nach ANSI-C und Java würde der Code in der Tat komisch sein und wohl nicht gehen.

Ich glaube, du solltest deine cases alle in einen switch reintun. oder aber mit if () {} else if () {} ... arbeiten

Verfasst: 17.12.2004, 17:49
von Dexter
if-Schleife hat aber nicht so funktioniert wie ich es wollte , && ist auch bei JS eine Und-Verknüpfung, funktioniert hier aber nicht

Verfasst: 17.12.2004, 20:32
von Dexter
else if habe noch nie gehört, außerdem fühle ich mich irgendwie jetzt wie die Jungs von Ascaron

bei Zahl_3 = 7 und Ergebnis = 7.1 (als Beispiel) , kommt unter Win2000 das Ergebnis + "Verbrauch OK", aber bei XP nur das Ergebnis :)5

Verfasst: 18.12.2004, 07:09
von Dexter
meinte meinen Code von oben

in den Büchern und Tutorials in die ich reingeschaut habe, gab es solche if Verzweigungen gar nicht

dein Code funktioniert zwar soweit, nur sollte ja nicht nur ein Satz ausgespuckt werden, sondern bei ergeb>zahl_3+2 beide zutreffenden (also Verbrauch zu Hoch und der Hinweis auf den Werstattbesuch)