Bildschirm inhalt löschen und programm neustarten!



  • Ich habe das so verstanden:

    int main() {
    	char c;
    	do {
    		printf("e = ende, jede andere Taste = fortfahren: ");
    		scanf("%c", &c);
    		printf("\n--> Dein Code... <--\n\n");
    		fflush(stdin);
    	} while(c != 'e');
            return 0;
    }
    


  • Allmächd, das hab ich ja komplett falsch verstanden 😃
    Die Lösung von Dummie ist natürlich richtig, du brauchst eine MainLoop *g*.
    rya.



  • #include <conio.h>
    #include <stdio.h>
    #include <math.h>
    
    int main ()
    {
     float kapital = 0;
     float rate, auszahlung;
     float zinsen, zinssatz;
     float rateneu, kapitalruhen, kapitalauszahl;
     int anfangsalter; 
     int ruhen, laufzeit;
     int monate;
     int zaehlmonat = 0;
     int jahr = 0;
     int schleife, schleife2, schleife3, schleife4;
    
    //Start des Programmes
    printf ("Rentenrechner\n");
    printf ("-------------\n\n");
    
    //Abfrage der variablen bzw. kundenbedingten Eingaben
    printf("Monatliche Einzahlung (Euro):.........");
           scanf ("%f", &rate);
    
           printf ("Laufzeit in Jahren entspricht:........");
                  scanf ("%d", &laufzeit);
    
                   printf ("Ruhezeit des Geldes in Jahren:........");
                          scanf ("%d", &ruhen);
    
                          printf ("Monatliche Rentenauszahlung (Euro):...");
                                 scanf ("%f", &auszahlung);
    
                                 printf ("Alter zu Beginn der Laufzeit:.........");
                                        scanf ("%d", &anfangsalter);
    
                                        printf ("\nAktueller Jahreszinssatz in %%:........");
                                               scanf ("%f", &zinsen);
    
    zinssatz = zinsen /12/100;
    
    //Berechnung des Kapitals am jeweiligen Jahresende
     printf ("\nKapital am Jahresende:\n----------------------\n");
            for (schleife = 0; schleife < laufzeit ; schleife = schleife + 1) //Berechnung auf die eingegebenen Jahre
                   {
                    for (schleife2 = 0; schleife2 < 12; schleife2++)  //Berechnung monatsweise (1 Jahr = 12 Monate)
                      { kapital = kapital * (1 + zinssatz) + rate; 
                           }
                    jahr = jahr + 1;
    
                    printf ("Jahr %3d   %11.2f\n", jahr, kapital);
                    }
    
    //Kapital nach Ablauf der Ruhezeit                 
    kapitalruhen = kapital;
    
    for (schleife3 = 0; schleife3 < ruhen; schleife3++)
                   {for (schleife4 = 0; schleife4 < 12; schleife4 ++) //löschen
                         kapitalruhen = kapitalruhen * (1 + zinssatz);
                   }
    
     printf("\n\n\nKapital nach %d Jahren Ruhezeit:\n-------------------------------\n", ruhen);
                           printf("%31.2f", kapitalruhen); 
    
     kapitalauszahl = kapitalruhen;
    
           for (kapitalauszahl; kapitalauszahl >= auszahlung; kapitalauszahl = (kapitalauszahl - auszahlung) * (1 + zinssatz))
                               {
                               monate = monate + 1;                         
                               }    
    
    //Berechnung der Laufzeit, für die das Geld reicht       
            printf("\n\n\nMonatliche Auszahlung von%5.2f Euro fuer ca.:\n---------------------------------------------", auszahlung);
                printf("\n                     %2d Jahre bzw. %3d Monate",monate/12, monate);
    
                        printf("\n\n\nAlter nach Komplettauszahlung:\n------------------------------");
                                printf("\n%24d Jahre", (monate/12 + anfangsalter + laufzeit + ruhen )); 
          getch ();
    }
    

    Sodala, hier ist der Code! und da würd ich gerne einbinden, dass man das Programm nochmals von vorne laufen lassen kann und vllt sogar die vorhergehende Berechnung gelöscht wird, wenn dies möglich ist.

    würde mich auch freuen, wenn mir jemand kleine tipps geben könnte was ich so von der Sprache her andersmachen sollte/müsste 🙂
    bin leider ein Anfänger.

    Dankeschön schon mal!

    Liebe Grüße
    Franze



  • Ich würde die Berechnung erstmal auslagern und das ganze dann so machen:

    #include <stdio.h>
     #include <stdlib.h>
    
     typedef enum eBOOL
     {
        FALSE,
        TRUE
     }BOOL;
    
     long berechnen()
     {
        printf("Berechne Werte\n");
        return 0;
     }
    
     void menue()
     {
        printf("=== Rentenrechner ==\n");
        printf("Auswahl:\n");
        printf("1 - Berechnen\n");
        printf("q - Exit\n");
     }
    
     int main(int argc, char** argv)
     {
        BOOL exit = FALSE;
        char key = 0;
        while(!exit)
        {
            menue();
            key = getch();
            if (key == 'q')
            {
               exit = TRUE;
            }
            if (key == '1')
            {
               long f = berechnen();
               printf("Das Ergebnis lautet: %i\n\n\n", f);
            }        
        }
     }
    

    edit: Was ich hier im Code vergessen habe, ist das Fragen nach den Parametern für die Berechnung und die fehlen auch noch als Übergabewert für die Funktion berechnen(). Falls dazu Fragen offen sind, wie man Übergabewerte einbaut, immer raus damit :).
    rya.



  • ähm ja, die fragen wären offen, wie ich jetz zu meinem eigentlichen Programm kommen 😉

    ich kenn mich da jetzt gerade gar nicht aus 😕 sry



  • #include <stdio.h>
    #include <stdlib.h>
    
    // das hier deklariert den Datentyp BOOL,
    // der nur 2 Werte erlaubt: 0 und 1 = Falsch und Wahr
     typedef enum eBOOL
     {
        FALSE,
        TRUE
     }BOOL;
    
    // Hier kommt dein Code rein, wo du die Berechnung stehen 
    // hast. Das nennt man ein Unterprogramm, oder auch Funktion.
    // Ich hab hier das ganze nur ein wenig gekürzt wegen der Übersicht.
     long berechnen(float rate, float zinsen, int laufzeit,
                    int ruhen, int anfangsalter)
     {
        printf("\nUebergebene Werte:\n")
        printf("%.2f Raten, %.2f%% Zinsen, %i Jahre Laufzeit, %i Ruhen, %i Alter\n",
               rate, zinsen, laufzeit, ruhen, anfangsalter);
        // Hier Berechung durchführen.
        return 0;
     }
    
    // Das hier macht nichts weiter, als dem User eine Auswahl zu geben,
    // welche Optionen er hat.
     void menue()
     {
        printf("=== Rentenrechner ==\n");
        printf("Auswahl:\n");
        printf("1 - Berechnen\n");
        printf("Q - Exit\n");
     }
    
    // Hier fragen wir die Parameter ab vom User, welche zur
    // Berechnung nötig sind.
    // Das kennst du ja.  Ich habs nur ausgelagert.
    // Das ist übersichtlicher.
     long parameter_abfragen()
     {
        float rate = 0, zinsen = 0;
        int laufzeit = 0, ruhen = 0, anfangsalter = 0;    
    
        printf("Es sind Daten noetig fuer die Berechnung:\n");
        printf("Bitte geben Sie die mtl. Raten ein: ");
        scanf("%f", &rate);    
        printf("\nBitte geben Sie die Zinsen ein:");
        scanf("%f", &zinsen);
        printf("\nBitte geben Sie die Laufzeit ein:");
        scanf("%i", &laufzeit);
        printf("\nBitte geben Sie die Ruhen ein:");
        scanf("%i", &ruhen);
        printf("\nBitte geben Sie das Anfangsalter ein:");
        scanf("%i", &anfangsalter);
    
        // wir geben einfach das ergebnis von berechnen() direkt zurück.
        return berechnen(rate, zinsen, laufzeit, ruhen, anfangsalter);
     }
    
     // Die Main wurde stark gekürzt.
    // Vorteil: Besser lesbar und besser wartbar.
     int main(int argc, char** argv)
     {
        // Unsere Abbruchbedingung.
        BOOL exit = FALSE;
        // Die Variable, die die Auswahl vom user empfängt.
        char key = 0;
        // Das ist eine normale Schleife. Solange Exit nicht 1 ist, wird
        // sie ausgeführt.
        while(!exit)
        { 
            // hier ruf ich das Unterprogramm Menue() auf. 
            menue();
            // Nun fragen wir was wir tun sollen
            key = getch();
            // 'q' steht für die Taste Q auf der Tastatur ohne Shift.
            if (key == 'q')
            {
               exit = TRUE;
            }
            // wenn 1 gedrückt wird, fangen wir an
            if (key == '1')
            {
               // Hier rufen wir einfach unsere Funktion auf, die 
               // die werte abfragt. Und die gibt uns das Ergebnis
               // von berechnen zurück.
               long f = parameter_abfragen();
               printf("Das Ergebnis lautet: %i\n\n\n", f);
            }        
        }
     }
    

    Hab das Beispiel mal erweitert. Und besser kommentiert. Ich hoffe damit wirds klarer. Bin nicht so gut im erklären :-).
    Kopiers mal raus und speicher es in eine Datei und kompilier es. Dann wirds vllt klarer, was das ganze macht :).
    rya.



  • Scorcher24 schrieb:

    #include <stdio.h>
    #include <stdlib.h>
     
    // das hier deklariert den Datentyp BOOL,
    // der nur 2 Werte erlaubt: 0 und 1 = Falsch und Wahr
     typedef enum eBOOL
     {
        FALSE,
        TRUE
     }BOOL;
     
     
    // Hier kommt dein Code rein, wo du die Berechnung stehen 
    // hast. Das nennt man ein Unterprogramm, oder auch Funktion.
    // Ich hab hier das ganze nur ein wenig gekürzt wegen der Übersicht.
     long berechnen(float rate, float zinsen, int laufzeit,
                    int ruhen, int anfangsalter)
     {
        printf("\nUebergebene Werte:\n")
        printf("%.2f Raten, %.2f%% Zinsen, %i Jahre Laufzeit, %i Ruhen, %i Alter\n",
               rate, zinsen, laufzeit, ruhen, anfangsalter);
        // Hier Berechung durchführen.
        return 0;
     }
     
    // Das hier macht nichts weiter, als dem User eine Auswahl zu geben,
    // welche Optionen er hat.
     void menue()
     {
        printf("=== Rentenrechner ==\n");
        printf("Auswahl:\n");
        printf("1 - Berechnen\n");
        printf("Q - Exit\n");
     }
     
    // Hier fragen wir die Parameter ab vom User, welche zur
    // Berechnung nötig sind.
    // Das kennst du ja.  Ich habs nur ausgelagert.
    // Das ist übersichtlicher.
     long parameter_abfragen()
     {
        float rate = 0, zinsen = 0;
        int laufzeit = 0, ruhen = 0, anfangsalter = 0;    
        
        printf("Es sind Daten noetig fuer die Berechnung:\n");
        printf("Bitte geben Sie die mtl. Raten ein: ");
        scanf("%f", &rate);    
        printf("\nBitte geben Sie die Zinsen ein:");
        scanf("%f", &zinsen);
        printf("\nBitte geben Sie die Laufzeit ein:");
        scanf("%i", &laufzeit);
        printf("\nBitte geben Sie die Ruhen ein:");
        scanf("%i", &ruhen);
        printf("\nBitte geben Sie das Anfangsalter ein:");
        scanf("%i", &anfangsalter);
        
        // wir geben einfach das ergebnis von berechnen() direkt zurück.
        return berechnen(rate, zinsen, laufzeit, ruhen, anfangsalter);
     }
     
     // Die Main wurde stark gekürzt.
    // Vorteil: Besser lesbar und besser wartbar.
     int main(int argc, char** argv)
     {
        // Unsere Abbruchbedingung.
        BOOL exit = FALSE;
        // Die Variable, die die Auswahl vom user empfängt.
        char key = 0;
        // Das ist eine normale Schleife. Solange Exit nicht 1 ist, wird
        // sie ausgeführt.
        while(!exit)
        { 
            // hier ruf ich das Unterprogramm Menue() auf. 
            menue();
            // Nun fragen wir was wir tun sollen
            key = getch();
            // 'q' steht für die Taste Q auf der Tastatur ohne Shift.
            if (key == 'q')
            {
               exit = TRUE;
            }
            // wenn 1 gedrückt wird, fangen wir an
            if (key == '1')
            {
               // Hier rufen wir einfach unsere Funktion auf, die 
               // die werte abfragt. Und die gibt uns das Ergebnis
               // von berechnen zurück.
               long f = parameter_abfragen();
               printf("Das Ergebnis lautet: %i\n\n\n", f);
            }        
        }
     }
    

    Hab das Beispiel mal erweitert. Und besser kommentiert. Ich hoffe damit wirds klarer. Bin nicht so gut im erklären :-).
    Kopiers mal raus und speicher es in eine Datei und kompilier es. Dann wirds vllt klarer, was das ganze macht :).
    rya.

    Deine Vorgehensweise ist grundsätzlich richtig, jedoch kannst du die zusätliche Variabel "exit" vermeiden:

    int main(int argc, char** argv)
     {
        // Die Variable, die die Auswahl vom user empfängt.
        char key = 0;
        // Das ist eine normale Schleife. Solange Exit nicht 1 ist, wird
        // sie ausgeführt.
        for(;;)
        { 
            // hier ruf ich das Unterprogramm Menue() auf. 
            menue();
            // Nun fragen wir was wir tun sollen
            key = getch();
            // 'q' steht für die Taste Q auf der Tastatur ohne Shift.
            if (key == 'q')
            {
               return 0;
            }
            // wenn 1 gedrückt wird, fangen wir an
           // else if (key == '1') // Wenn überhaupt, dann ELSE IF!!!
            //{
               // Hier rufen wir einfach unsere Funktion auf, die 
               // die werte abfragt. Und die gibt uns das Ergebnis
               // von berechnen zurück.
               long f = parameter_abfragen();
               printf("Das Ergebnis lautet: %i\n\n\n", f);
            //}        
        }
     }
    

    Es gibt da noch ein paar andere Dinge, die du hättest besser machen können, aber wir wollens ja jetzt nicht übertreiben 🙂

    Viele Grüße,
    Patrick



  • Das mit dem else hab ich angenommen und das Ding gerade ohne Kommentare durch den GCC mit -W4 und --ansi gejagt und es gab weder Fehler noch Warnungen.
    Viele Wege führen nach Rom und bitte, hackt doch nicht immer auf Kleinigkeiten rum. Da vergeht einem die Lust am Helfen in diesem Board. Man tippt hier den Code schnell zusammen um zu helfen und es geht ja auch nur um das grundsätzliche Verständnis.
    rya.



  • Scorcher24 schrieb:

    Das mit dem else hab ich angenommen und das Ding gerade ohne Kommentare durch den GCC mit -W4 und --ansi gejagt und es gab weder Fehler noch Warnungen.
    Viele Wege führen nach Rom und bitte, hackt doch nicht immer auf Kleinigkeiten rum. Da vergeht einem die Lust am Helfen in diesem Board. Man tippt hier den Code schnell zusammen um zu helfen und es geht ja auch nur um das grundsätzliche Verständnis.
    rya.

    Es ist einfach so, dass du dir mehr arbeit machst, als nötig ist 🙂 Und davor wollte ich dich quasi bewahren, ist also nicht böse gemeint 🙂

    Viele Grüße,
    Patrick



  • Hmm, ich persönlich finde nur eine while()-Schleife mit Abbruch-Bedingung besser, als eine leere for-Schleife. Natürlich führt beides zum Ziel, ersteres ist aber imho besser nachzuvollziehen.
    No hard feelings :).
    rya.


Anmelden zum Antworten