Werte werden nicht von/zu Variablen subtrahiert oder addiert
-
drakon schrieb:
Heringsalat100 schrieb:
...Aber wie speichere ich sie?
Indem du das Ergebnis der Subtraktion einer Variable zuweist. (so, wie es _matze zeigt).
Ich habe den Code wie folgt umgeändert...
if(aktion=1) { Geld = Geld - 3; S = S + 2; H = H + 4; } if(aktion=2) { Geld = Geld - 10; S = S + 12; }...aber das Problem bleibt bei mir trotzdem. Die Variablen zeigen oben den Standard-Wert an.
-
Kaum. Dadurch, dass du den
operator=mit demoperator==verwechselst, werden dieif-Bedingungen immer zutrueausgewertet und die folgenden Anweisungen dadurch unabhängig vonaktionimmer ausgeführt.
-
Ich habe
if(aktion=1)in
if(aktion==1)umgeändert.
(auch aktion=2)
Danach habe ich noch...
else if(aktion==1 || 2) { cout<<"\n"; cout<<"Sie muessen 1 oder 2 eingeben!!!\n"; cout<<"\n"; }...angefügt, aber das Problem besteht immernoch.
Dazu kommt bei der Eingabe 1 jetzt ebenfalls diese Meldung.
Mit welchen Code würde es denn funktionieren?
-
else if(aktion==1 || 2)Das macht nicht, was du tust. Schreib es so:
else if (aktion == 1 || aktion == 2)Wobei auch
switcheine Erwähnung wert ist.Ich sehe dein Problem nicht ganz. Was geht denn nicht, kannst du mal den aktuellen Code zeigen?
-
Also, mein Problem ist, dass der Wert von Spass, Hunger, Geld oben immer gleich angezeigt ist. Auch wenn ich 2 eingebe, was eigentlich zufolge haben soll, dass Geld um 10 subtrahiert und Spass um 12 addiert wird, bleiben die Werte oben immer 100, 50 und 50.
(Achso: Wenn ich 1 eingebe kommt trotzdem die else if()-Meldung. Auch nachdem ich es umgeändert habe)
#include <cstdlib> #include <iostream> #include <windows.h> #include <string> #include <stdio.h> #include <conio.h> //wollte vorher noch andere Sachen reinbringen, deswegen habe ich viel includiert using namespace std; int main(int argc, char *argv[]) { int S; S = 50; int H; H = 50; float Geld; Geld = 100; cout<<"Sie besitzen " << Geld << "$\n"; cout<<"\n"; cout<<"Spass: "<< S <<" / Hunger: "<< H <<"\n"; cout<<"\n"; cout<<"Was wollen Sie machen?\n"; cout<<"\n"; cout<<"1) Eis kaufen (Spass: 2, Hunger: 4) Kosten: 3$"; cout<<"\n"; cout<<"2) Ins Kino gehen (Spass: 12) Kosten: 10$\n"; cout<<"\n"; int aktion; cin>>aktion; if(aktion==1) { Geld = Geld - 3; S = S + 2; H = H + 4; } if(aktion==2) { Geld = Geld - 10; S = S + 12; } else if(aktion==1 ||aktion==2) { cout<<"\n"; cout<<"Sie muessen 1 oder 2 eingeben!!!\n"; cout<<"\n"; } }
-
Heringsalat100 schrieb:
Also, mein Problem ist, dass der Wert von Spass, Hunger, Geld oben immer gleich angezeigt ist. Auch wenn ich 2 eingebe, was eigentlich zufolge haben soll, dass Geld um 10 subtrahiert und Spass um 12 addiert wird, bleiben die Werte oben immer 100, 50 und 50.
Füge deinem Code mal noch folgende Zeilen hinzu:
// ... else if(aktion==1 ||aktion==2) { cout<<"\n"; cout<<"Sie muessen 1 oder 2 eingeben!!!\n"; cout<<"\n"; } // ab hier cout<<"Sie besitzen nun " << Geld << "$\n"; cout<<"\n"; cout<<"Spass: "<< S <<" / Hunger: "<< H <<"\n"; cout<<"\n"; // bis hier }Ändern sich die Werte nun?
Desweiteren wäre es womöglich ganz gut wenn du dir ein Buch zum Thema C++-Programmierung durchlesen würdest, mit dem du dir die Grundlagen der C++-Programmierung aneignen könntest. Meine Empfehlung wäre das Buch "C++ Primer".
-
Das ist natürlich klar, dass du die else-if ausgegeben bekommst. Der Code muss so aussehen:
if(aktion==1) { Geld = Geld - 3; S = S + 2; H = H + 4; } else if(aktion==2) { Geld = Geld - 10; S = S + 12; } else { cout<<"\n"; cout<<"Sie muessen 1 oder 2 eingeben!!!\n"; cout<<"\n"; }Dadurch, dass du
if()... if()... else if()...machst, gehört die erste if, nicht zu anderen if und zum else if, du musst dir if-else so vorstellen, dass diese zusammen gehören, könnte also ungefähr so aussehen.
{ if(...) {...} else if(...) {...} else {...} } { if(...) {...} } { if(...) {...} else {...} }Sie bilden sozusagen zusammen eine Einheit.
Und bei deiner else if, sieht das so aus.wenn(aktion 1 ist ODER aktion 2 ist) dann ...Damit deine else-if funktioniert, wodurch sie aber wenig Sinn ergibt, müsste sie so aussehn:
else if(!(aktion == 1 || aktion == 2)) {...}Übrigens, gewöhn dir Einrückung an.
-
#include "stdafx.h" #include <cstdlib> #include <iostream> #include <windows.h> #include <string> #include <stdio.h> #include <conio.h> //wollte vorher noch andere Sachen reinbringen, deswegen habe ich viel includiert using namespace System; using namespace std; int main() { int S; S = 50; int H; H = 50; float Geld; Geld = 100; cout<<"Sie besitzen " << Geld << "$\n"; cout<<"\n"; cout<<"Spass: "<< S <<" / Hunger: "<< H <<"\n"; cout<<"\n"; cout<<"Was wollen Sie machen?\n"; cout<<"\n"; cout<<"1) Eis kaufen (Spass: 2, Hunger: 4) Kosten: 3$"; cout<<"\n"; cout<<"2) Ins Kino gehen (Spass: 12) Kosten: 10$\n"; cout<<"\n"; int aktion; cin>>aktion; if(aktion==1) { Geld = Geld - 3; S = S + 2; H = H + 4; } else if(aktion==2) { Geld = Geld - 10; S = S + 12; } else { cout<<"\nSie muessen 1 oder 2 eingeben!!!\n\n"; } cout << "Geld: " << Geld << " Hunger: " << H << " Spass: " << S << endl; }Den else if Zweig versteh ich nicht. Du prüfst auf 1 oder 2 und nochmals im else if Zweig auf 1 oder 2, und schreibst dann noch zum Überfluss, geben Sie 1 oder 2 ein. Was soll der User machen, er hat doch 1 oder 2 eingeben. Guck Dir mal meine Lösung an.
Und guck wirklich mal in ein Grundlagenbuch, mussten wir alle mal durch.
-
Zu spät
-
Jetzt funktioniert es.
Danke an alle für die Hilfe

Und außerdem werde ich mir jetzt ein Buch holen.
(Danke für den Buch-Tipp, Mizar)
-
Weiß nicht, ob es schon kam, aber diese if-kaskade würdest du mit nem
switchwunderbar umgehen können ^^#include <stdio.h>
der Header heißtcstdiousing namespace System;
Wie erstellst du ein Projekt, damit der MSVC das mit in die Datei reinschreibt? Oder hast du das (unsinnigerweise) so gar selbst mit reingeschrieben?Btw: Da du den precompiled Header (
#include "stdafx.h") nicht zu verwenden scheinst, solltest du ihn einfach bei den Projektoptionen deaktivieren - und dann kannste den auch löschen...zum Deaktivieren: ganz links auf deinen Projektname (fett geschrieben) rechtsklicken, dann Properties anwählen, dann "Configuration Properties" -> "C/C++" -> "Precompiled Header" -> "Not Using Precompiled Headers" bei "Create/User Precompiled Header" auswählen... Ich gehe einfach mal davon aus, dass du es auch finden wirst, wenn du die deutsche Version hast

S und H sind evtl auch nicht die allerbesten Variablen-Namen ^^
bb
-
Du solltest dich mal mit den verschiedenen Möglichkeiten des Debuggers auseinandersetzen, um auch solche semantischen Fehler schnell zu finden (Haltepunkte, schrittweises Ausführen, Debug-Ausgaben usw.).