CKonto - Funktioniert nicht wie ich mir das vorstelle: Entweder 0 Ausgabe oder Run time Error



  • Skym0sh0 schrieb:

    Du bist doch schon was länger hier im Forum unterwegs, dann solltest du nämlich wissen, dass man Quelltext aufs Wesentliche kürzen sollte !!!

    Sry, dachte mir halt, dass man dann vielleicht das Programm besser nachvollziehen kann.

    Skym0sh0 schrieb:

    @
    Ohne deinen Code angeschaut zu haben: Meldet dir deine IDE vllt sowas wie nicht initialisierte Variable verwendet.. bla bla wollen sie das wirklich? oder ist das ein richtiger Error?

    Mein Compiler haut halt Warnings raus, dass die Variablen nicht initialisiert sind.

    Edit:

    Wenn ich aber die Variablen mit 0.0 vorinitialisiere, dann wird mir in der Ausgabe auch 0 angezeigt...



  • 0+0+0+0=0
    Ich frag mich wo du ein Problem hast...



  • gnihihi schrieb:

    0+0+0+0=0
    Ich frag mich wo du ein Problem hast...

    Ich möchte ja die Werte per Tastatur einlesen und nicht per konstanten Wert im Quellcode einlesen....



  • Dann frag sie auch zuerst ab bevor du sie zusammenaddierst
    Oder versteh ich dein Problem nicht?



  • gnihihi schrieb:

    Dann frag sie auch zuerst ab bevor du sie zusammenaddierst
    Oder versteh ich dein Problem nicht?

    Wie meinst Du das mit abfragen?

    Kannst Du es vielleicht per Beispiel zeigen?

    Edit:

    Ich frage sie ja eigentlich schon ab...

    Schaue in den Zeilen 213 bis 248



  • Du erstellst 4 Variablen weist ihnen den Wert0 zu und addierst das ganze
    Bin Grad Net an meinem Rechner kann kein Beispiel machen

    Ps: Tastatur Grad unter allersau



  • class Auszahlungen:public Stand
    

    Auszahlungen erbt von Stand. Meinst du Kontostand?
    Wenn ja, was hat Auszahlungen damit zu tun?
    Irgendwie verstehe ich nicht, was du dir dabei gedacht hast...



  • Nathan schrieb:

    class Auszahlungen:public Stand
    

    Auszahlungen erbt von Stand. Meinst du Kontostand?

    Ja meinte ich...

    Nathan schrieb:

    Wenn ja, was hat Auszahlungen damit zu tun?
    Irgendwie verstehe ich nicht, was du dir dabei gedacht hast...

    Ich wollte, dass es den Kontostand, den ich per Tastatur eingelesen habe, erbt...



  • Äh, moment: Gehst du davon aus, dass sich alles auf das gleiche Objekt bezieht?!
    Sprich, wenn du ein Kontostand Objekt bearbeitest, dass dann alle, die davon geerbt haben, davon wissen?



  • soh, endlich an meinem heißgeliebten Rechner.

    case 1:
                        {
                            cout << "Wie hoch waren die Mieteinnahmen?\n";
                            double Mieteinnahmen;
                            cin  >> Mieteinnahmen;
                        }
    

    Was stellst du dir da vor?
    Ich glaube du machst nen großen Denkfehler.

    In der Bedingung erstellst du ne Variable vom Typ double, namens "Mieteinnahmen" wo du deinen heißgeliebten Wert eingibst (das gleiche gilt auch für die anderen Bedingungen). Was du hierzu wissen musst, ist, sobald der Block ( {} ) verlassen wird, ist deine angelegte Variable außerhalb seines Gültigkeitsbereich und somit kannst du nicht mehr darauf zugreifen.

    Ein paar Zeilen drunter erstellst du nochmal die Variable "Mieteinnahmen" (und drei weitere Variablen) die du auf 0.0 initialisierst und diese Variablen dann zusammenaddierst. Und nun nochmal: Was stellst du dir dabei vor? Glaubst du etwa, dass er wieder den alten (von vorhin eingegebenen Wert) enthält? Wenn du das wirklich denkst, dann tu dir ernsthaft selbst einen Gefallen, und lerne die Grundlagen nochmal vernünftig durch 🙂
    Wenn du willst, dass deine Variablen den eingegebenen Wert enthalten gehst du folgendermaßen vor:

    int main()
    {
    ....
    
     /*** knalle die variablen erstmals in den korrekten gültigkeitsbereich....***/
        double Mieteinnahmen=0.0;
        double Vermögenswirksamen_Leistungen=0.0;
        double Bareinzahlungen=0.0;
        double Dividenden_aus_Aktienpakete=0.0;
    
            if ("Ja")
            {
                ...
                switch(number)
                {
                    case 1:
                        {
                            cout << "Wie hoch waren die Mieteinnahmen?\n";
                            // double Mieteinnahmen;             <======== das hier lässt du komplett weg. die variablen wurden ja schließlich oben schon erstellt.
                            cin  >> Mieteinnahmen;               // <===== hier verpasst du deiner variable nun den heißgeliebten wert.
                        }
    
    ...
    /*** zum platzsparen hab ich die anderen bedingungen mal weggelassen, es ist aber das gleiche prinzip ***/
                }
    
            }
    ...
    
        /*** _NUN_ kannst du die eingegebenen werte zusammenaddieren ***/
    
        double Einzahlungen_gesamt = Mieteinnahmen + Vermögenswirksamen_Leistungen + Bareinzahlungen + Dividenden_aus_Aktienpakete;
    
    ....
     /*** und hier gehts dann weiter... ***/
        return 0;
    }
    

    Und noch ne kleine Abschweifung vom Thema: Deine main-Funktion (ich hab jetzt nur die main überflogen) ist eine Code-Suppe. Zur Verbesserung geb ich dir ein Stichwort mit auf den Weg: Funktionen. Vernachlässige sie nicht.

    have a nice day.
    ich bin müd.

    Gute Nacht! *mit Küsschen um sich werf*



  • gnihihihihi schrieb:

    have a nice day.
    ich bin müd.

    Um 03:10 Uhr nachts an einem Sonntag?



  • gnuhuhuhu schrieb:

    gnihihihihi schrieb:

    have a nice day.
    ich bin müd.

    Um 03:10 Uhr nachts an einem Sonntag?

    Ich glaub wir sind Montag 😃
    Bin immer noch müd 😛



  • @gnihihihihi:

    Wenn ich das so mache, wie Du vorgeschlagen hast, dann bekomme ich einen Linkerfehler...

    LINK: fatal error LNK1168: "...- Klasse Konto.exe" kann nicht zum Schreiben geöffnet werden.
    

    Gruß

    Max



  • Gehe mal in den Taskmgr und beende den Prozess deiner *.exe



  • Nathan schrieb:

    Gehe mal in den Taskmgr und beende den Prozess deiner *.exe

    Punkt 1:

    Warum denn??

    Punkt 2:

    Wie kommt man unter Windows 7 gleich wieder in den Taskmanger?



  • Weil der offenbar noch aktiv ist und dir Schreibrechte entzieht. Kenn ich.
    strg + alt + entf



  • Nathan schrieb:

    Weil der offenbar noch aktiv ist und dir Schreibrechte entzieht. Kenn ich.
    strg + alt + entf

    Direkt in den Task-Manager kommt man mit Strg+Shift+Esc 🙂



  • Strg + Shift + Esc 🙄 Herr Nathan ...



  • Tschuldigung, hab Windows xp.

    Und auf dem Windows 7 Rechner mache ich Rechtsklick auf Taskleiste.



  • Nathan schrieb:

    Tschuldigung, hab Windows xp.

    Und auf dem Windows 7 Rechner mache ich Rechtsklick auf Taskleiste.

    Brauchst Dich doch nicht entschuldigen ... bei mir hat es geklappt.

    Ich habe alles, was mit meinem Compiler zu tun gehabt hat, beendet.

    Nun meckert mein Compiler an einer neuen Stelle rum:

    Nämlich mosert er an, dass Einzahlungen_gesamt nicht initialisiert ist, obwohl ich es ausgebessert habe...

    Edit:

    Außerdem überspringt mein Compiler die Eingabeoption Dividenden aus Aktienpaketen

    Edit²:

    Ich werde später den Code, um den es mir geht, posten. Nur muss ich jetzt was erledigen, das wahrscheinlich bis 18 Uhr dauert. Also bis später.


Anmelden zum Antworten