Werte werden nicht von/zu Variablen subtrahiert oder addiert



  • 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 switch eine 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 switch wunderbar umgehen können ^^

    #include <stdio.h>
    der Header heißt cstdio

    using 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.).


Anmelden zum Antworten