C++ Problem

Du suchst ein Programm?
Treibt dich Hardware, PHP oder Windows zur Verzweifelung? Hier wird dir geholfen.

Moderator: ACZ-Mod-Team

Antworten
Dexter

C++ Problem

Beitrag 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."
spalter
Diplompsychologe
Beiträge: 8969
Registriert: 30.11.2002, 18:12
Wohnort: NRW
Kontaktdaten:

Beitrag 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)?
Der ultimative Test: Wie dumm bist Du wirklich? - KLICK HIER
Der Link geht nicht Du Spacken!
Dexter

Beitrag 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.
Benutzeravatar
Anstoss Player
1x ACZ, immer ACZ
1x ACZ, immer ACZ
Beiträge: 10906
Registriert: 03.08.2003, 01:52
Wohnort: Wiesbaden

Beitrag von Anstoss Player »

setze mal ordentlich Klammern, das kann manchmal hilfreich sein
Weggehen bedeutet nicht unbedingt,
Irgendwo anders dann anzukommen.


-ClickClickDecker
Dexter

Beitrag von Dexter »

Wo und warum soll ich zusätzliche Klammern setzen?
Benutzeravatar
Anstoss Player
1x ACZ, immer ACZ
1x ACZ, immer ACZ
Beiträge: 10906
Registriert: 03.08.2003, 01:52
Wohnort: Wiesbaden

Beitrag 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)
Weggehen bedeutet nicht unbedingt,
Irgendwo anders dann anzukommen.


-ClickClickDecker
spalter
Diplompsychologe
Beiträge: 8969
Registriert: 30.11.2002, 18:12
Wohnort: NRW
Kontaktdaten:

Beitrag von spalter »

Unser Programmiermeister sagte zum Thema Klammern immer: "So viele wie nötig, so wenig wie möglich!"
Der ultimative Test: Wie dumm bist Du wirklich? - KLICK HIER
Der Link geht nicht Du Spacken!
Dexter

Beitrag 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!"
Dexter

Beitrag von Dexter »

switch (ergeb<=zahl_3+0.5 + ergeb>=zahl_3-1)

es funktioniert so wie es mir gedacht hatte
Benutzeravatar
Anstoss Player
1x ACZ, immer ACZ
1x ACZ, immer ACZ
Beiträge: 10906
Registriert: 03.08.2003, 01:52
Wohnort: Wiesbaden

Beitrag 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
Weggehen bedeutet nicht unbedingt,
Irgendwo anders dann anzukommen.


-ClickClickDecker
Dexter

Beitrag 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
Dexter

Beitrag 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
Dexter

Beitrag 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)
Antworten