Bildschirm inhalt löschen und programm neustarten!



  • Hallo zusammen,
    ich hoffe ihr könnt ma schnell helfen, ich muss ein Programm schreiben "Rentenrechner" der halt so a bissl rumrechnet mit eingaben und soweiter.

    Nun hab ich mir gedacht, ich "pimp" des a bissl auf und des hab ich mir so vorgestellt, das man per tasteneingabe z.B. "n" des gleiche programm nochmal von vorne im gleiche fenster bekommt und wenn man "e" drück wird das programm beendet.
    ist des irgendwie mit einem Befehl möglich?

    Vielen Dank schon mal

    Gruß
    Franze

    So für alle die nicht verstehen was ich mein:

    Ich bin auf der suche nach einem Code, der es ermöglicht ein Programm per Tastendruck nocheinmal von vorne laufenzulassen ohne es beenden zu müssen!



  • Franze-Banze schrieb:

    Nun hab ich ma gedacht ich "pimp" des a bissl auf und des hab ich mir so vorgestellt, das man per tasteneingabe z.B. "n" des gleiche programm nochmal ...

    du hast dir was gedacht 😕 ? Übersetzt bitte deinen Text auf Deutsch, damit wir alle verstehen können, was du da schreibst.



  • so verständlicher 😉 😉 ?

    So für alle die nicht verstehen was ich mein:

    Ich bin auf der suche nach einem Code/Befehl, der es ermöglicht ein Programm per Tastendruck nocheinmal von vorne laufenzulassen ohne es beenden zu müssen!



  • Es gibt keinen univesallen Code dafür. Es hängt davon ab, wie du dein Programm geschrieben hast.



  • und das würde heißen :-/?

    ich habe erst vor 2 wochen mit dem Programmieren angefangen, kenn mich deshalb nicht wirklich aus.
    wir üssen nur so ein Programm erstellen und ich fände es recht praktisch wenn ich hier diesen befehl einbauen würde/könnte.

    soll ich den Code reinkopieren? oder an wen könnte ich mich wenden? der mir sagt wie ich das am besten mache.



  • ich weiss nicht genau wie du das meinst 😕 , aber ich wuerde es mit goto oder vll einer do-schleife versuchen..



  • isch_19 schrieb:

    ... ich wuerde es mit goto oder vll einer do-schleife versuchen..

    auch wenn viele bei goto wieder aufschreien werden, manchmal kanns schon nützlich sein, hatte da auch an sowas gedacht.

    soll ich den Code reinkopieren?

    jo mach mal. aber achte dann bitte auf die code tags 😉



  • Du bekommst ja per argv[0] den Pfad und Dateinamen deiner .exe.
    Warum schreibst du jetzt nicht in den temporären ordner eine .bat-Datei und rufst die per system() auf?
    rya.



  • 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