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.