Hilfe bei Anfängerprogramm [Solved]



  • Hallo,

    ich habe eine Frage zu meinem Programm.
    Ich möchte einen Preis einlesen und diesen zu einer Zwischensumme addieren. In FPC geht das ganz einfach z.B. Zwischensumme:= Zwischensumme + Preis. Dies funktioniert jedoch nicht in C++ daher die Frage: ,,Wie geht's in C++?

    Hier mein Code:

    std::cout << "Preis angeben." << "\n";
            int Preis;
            std::cin >> Preis;
            int Zwischensumme = Zwischensumme + Preis;
    

    Fehler:
    Code C6001 Nicht initialisierter Speicher "Zwischensumme" wird verwendet.

    Danke



  • Geh die Zeile mal von rechts nach links durch und überleg dir, ab wann die Variable Zwischensumme existiert.



  • @RAFFYN_ sagte in Hilfe bei Anfängerprogramm:

    int Zwischensumme = Zwischensumme + Preis;

    Selbst wenn das übersetzt würde, so wäre der Wert immer gleich Preis. Da wird wohl auch drumherum im Code den du nicht zeigst was nicht stimmen.



  • @RAFFYN_ sagte in Hilfe bei Anfängerprogramm:

    Dies funktioniert jedoch nicht in C++

    Das funktioniert in C++ genauso wie in Pascal.

    Du musst die Fehlermeldung mal wirken lassen und dir auch mal überlegen, wann diese Variable existiert.



  • @manni66 sagte in Hilfe bei Anfängerprogramm:

    Selbst wenn das übersetzt würde, so wäre der Wert immer gleich Preis.

    Ist das eine globale oder static Varable?



  • Hallo, hier ist der gesamte Quellcode

    #include <iostream>
    
    int main()
    {
        char Userinput;
        
        do {
            std::cout << "Preis angeben." << "\n";
            int Preis;
            std::cin >> Preis;
            
            int Zwischensumme = Preis + Zwischensumme;
            
            std::cout << "Weiter? y/n";
            std::cin >> Userinput;
            
           //Zwischensumme returnen und im if statement benutzen- wie? 
        } while (Userinput != 'y');
       
        if (Userinput == 'y') {
            std::cout << "Der zu zahlende Betrag belaeuft sich auf " << Zwischensumme << " Euro.";
    
        }
    
    
    }
    


  • Du mußt die Variable Zwischensumme vor der Schleife anlegen (+ intialisieren), und dann innerhalb die Berechnung (Addition) ausführen (hast du bei Userinput ja auch so gemacht).



  • @Th69 Ah, habe den Fehler jetzt gesehen danke.


  • Mod

    This post is deleted!

  • Mod

    @DocShoe sagte in Hilfe bei Anfängerprogramm:

    Geh die Zeile mal von rechts nach links durch und überleg dir, ab wann die Variable Zwischensumme existiert.

    int i = i + 1; ist syntaktisch korrekt. Die beste Art von korrekt.



  • @SeppJ

    Gibt nen Haufen Sachen, die syntaktisch korrekt sind und nicht das tun, was man möchte,


  • Mod

    Ich will halt sagen, dass es nicht, wie behauptet, das Problem ist, ab wann die Variable Zwischensumme existiert. int Zwischensumme = Preis + Zwischensumme; sieht zwar komisch aus, ist aber äquivalent zu

    int Zwischensumme;
    Zwischensumme = Preis + Zwischensumme;
    

    Da wird deutlicher, dass Existenz nicht das Problem ist, sondern Zustand.

    Komisch ist auch, dass der Code in diesem Beitrag eigentlich gar nicht compilieren sollte, denn in Zeile 21 ist die Existenz von Zwischensumme tatsächlich ein Problem und alle von mir getesteten Versionen von MSVC sehen das genauso und schmeißen daher keine Warnung C6001, sondern Fehler C2065. Ich hoffe mal, dass liegt nur daran, dass @RAFFYN_ nicht ganz den richtigen Code zu der Warnung zeigt, und nicht daran, dass hier eine antike Version von MSVC genutzt wird, die den Code, so wie er ist, fehlerlos übersetzt. Wenn ich mich recht entsinne, haben sehr alte MSVC es mit den Scopes nicht so genau genommen.



  • @SeppJ Ja, es lag daran, dass ich Zwischensumme mit Zwischensumme initialisiert habe. Habe es jetzt via

    int Zwischensumme;
    Zwischensumme = Preis + Zwischensumme;
    


  • @RAFFYN_
    Jetzt haste das gleiche Problem, nur als Zweizeiler o.O
    Initialisier´ Zwischensumme mit 0!



  • @DocShoe Es funktioniert und meine IDE sagt, es gibt keine Probleme. Ich bekomme auch keinen Fehler mehr.
    Ich sehe gerade als Ergänzung, dass ich Zwischensumme vorher mit 0 initialisiert habe. Hehe mein Fehler, das musste man in FPC auch so machen, daher sorry.

    Habe etwas umgeändert, aber hier der komplette Code:

    #include <iostream>
    
    int main()
    {
        char Choice;
        do {
            float Zwischensumme = 0;
            float Preis;
            float Rabattpunkte;
            int gerundet;
            do {
    
                std::cout << "Preis angeben." << "\n";
    
                std::cin >> Preis;
    
                Zwischensumme = Preis + Zwischensumme;
    
    
    
    
            } while (!Preis == 0);
            char Rabattkarte;
            if (Preis == 0) {
                std::cout << "Der zu zahlende Betrag belaeuft sich auf " << Zwischensumme << " Euro." << "\n";
                std::cout << "Rabattkarte? (y/n)" << "\n";
                std::cin >> Rabattkarte;
            }
    
            if (Rabattkarte == 'y') {
                gerundet = round(Zwischensumme);
                Rabattpunkte = 0.1 * gerundet;
                std::cout << "Rabattpunkte: " << Rabattpunkte << "\n";
                
    
            }
    
            std::cout << "Schicht beenden? (y/n)" << "\n";
            std::cin >> Choice;
    
            
    
    
            std::cout << "\n";
            system("Pause > 0");
    
        } while (!Choice == 'y');
    
       
    }
    


  • @SeppJ sagte in Hilfe bei Anfängerprogramm [Solved]:

    ... , dass hier eine antike Version von MSVC genutzt wird, die den Code, so wie er ist, fehlerlos übersetzt. Wenn ich mich recht entsinne, haben sehr alte MSVC es mit den Scopes nicht so genau genommen.

    Für ein privates Projekt habe ich noch ziemlich lange den VC6 verwendet (also bis vor 10 Jahren oder so) und ich bin mir ziemlich sicher, dass er das nicht übersetzt hätte.
    Bei Schleifenvariablen gabs allerdings diese Probleme:

    void func()
    {
    	for(int i=0; i<10; ++i)
    	{
    		int z=0;
    	}
    	i; // geht
    	z; // geht nicht
    }
    

    @RAFFYN_ Man könnte noch anmerken, dass float für Geld und Preise aller Art der falsche Datentyp ist. Du kannst mal hier suchen, dazu gabs in der Vergangenheit wirklich Unmengen an Threads.


Log in to reply