[R00T]Bear
Newbie
- Registriert
- Okt. 2010
- Beiträge
- 5
Hallo meine hilfsbereiten Mitmenschen,
es geht weiter mit der munteren Fragestunde.
Folgende Situation gilt es sich vorstellen:
Ein Programm soll nach Eingabe von Startkapital, Zinssatz und Laufzeit eine Tabelle ausspucken in der die Laufzeit, die Zinsen und das Kapital berechnet werden.
Das habe ich dank meiner patentierten try&error-Vorangehensweise geschafft:
Es sollte zwar gedoublet werden aber dankenswerterweise funktioniert es wunderprächtig auch mit float
.
So, jetzt kommt der spannende Teil an dem ich grade hängengeblieben bin:
Das Programm soll bei fehlerhafter Eingabe von Werten den Benutzer erneut fragen. Heißt konkret: Gibt der Benutzer einen Buchstaben statt einer Zahl ein, soll in der nächsten Zeile die Eingabeaufforderung neu erscheinen. Gibt er einen Buchstaben und anschließend Zahlen ein, das selbe Spiel nochmal und gibt er erst Zahlen danach Buchstaben und dann wieder Zahlen ein, nochmal das ganze.
Startkapital: Y
Startkapital: 300X
Startkapital: 99x12
Startkapital: 12000 //<-- soll eingelesen werden, da nur Zahlen eingegeben worden sind
U get the point, eh?
Natürlich soll das ganze für alle 3 Eingabemöglichkeiten gelten (Startkapital, Zinssatz, Laufzeit).
Ich habe mich natürlich munter auf die Aufgabe gestürzt, bin aber nicht weit gekommen.
Mein Ansatz lautet wie folgt:
Ich bin mir sehr sicher das es so geht, es stellen sich mir - vorausgesetzt das stimmt so - dann 3 Fragen.
1. Wie erweitere ich das Programm das es erneut fragt ( die Einträge in den {} ).
2. Wie bringe ich es danach dazu, den korrekten Wert einzulesen und mit ihm zu rechnen.
3. Sollte nach jeder 'großen' if-Anweisung ein fflush kommen oder erledigt sich das ganze wenn im nächsten "if" die Variable "test" mit 0 initialisiert wird (siehe Versuch)?
Für zielführende hilfreiche Anregungen wäre ich danbar, am liebsten wäre es mir wenn sich jemand dem Programmcode kurz annimmt und ihn ensprechend ergänzt.
Thanks!
Nachtrag:
Inzwischen hab ich die Aufgabe mangels "Hilfe" in Eigenregie gelöst.
Da ich es hasse wenn Threads - ohne die Fragen beantwortet zu haben - enden, hier meine Lösung (es geht vielleicht eleganter, aber who cares?!)
es geht weiter mit der munteren Fragestunde.
Folgende Situation gilt es sich vorstellen:
Ein Programm soll nach Eingabe von Startkapital, Zinssatz und Laufzeit eine Tabelle ausspucken in der die Laufzeit, die Zinsen und das Kapital berechnet werden.
Das habe ich dank meiner patentierten try&error-Vorangehensweise geschafft:
Code:
#include <stdio.h>
int main(void)
{
float Kapital, Startkapital, Zinsen, Zinssatz;
int Jahre, i;
printf("Startkapital (in Euro): ");
scanf_s("%f", &Startkapital);
printf("Zinssatz (in Prozent): ");
scanf_s("%f", &Zinssatz);
printf("Laufzeit (in Jahren): ");
scanf_s("%d", &Jahre);
printf("\n");
printf("Jahre | Zinsen | Kapital \n");
printf("----------------------------- \n");
Kapital = Startkapital;
i = 1;
while (i <= Jahre)
{
Zinsen = Kapital * Zinssatz / 100;
Kapital = Zinsen + Kapital;
printf("%5.0d | %8.2f | %10.2f \n",i,Zinsen,Kapital);
i++;
}
system("PAUSE");
return 0;
}
So, jetzt kommt der spannende Teil an dem ich grade hängengeblieben bin:
Das Programm soll bei fehlerhafter Eingabe von Werten den Benutzer erneut fragen. Heißt konkret: Gibt der Benutzer einen Buchstaben statt einer Zahl ein, soll in der nächsten Zeile die Eingabeaufforderung neu erscheinen. Gibt er einen Buchstaben und anschließend Zahlen ein, das selbe Spiel nochmal und gibt er erst Zahlen danach Buchstaben und dann wieder Zahlen ein, nochmal das ganze.
Startkapital: Y
Startkapital: 300X
Startkapital: 99x12
Startkapital: 12000 //<-- soll eingelesen werden, da nur Zahlen eingegeben worden sind
U get the point, eh?
Natürlich soll das ganze für alle 3 Eingabemöglichkeiten gelten (Startkapital, Zinssatz, Laufzeit).
Ich habe mich natürlich munter auf die Aufgabe gestürzt, bin aber nicht weit gekommen.
Mein Ansatz lautet wie folgt:
Code:
#include <stdio.h>
int main(void)
{
float Kapital, Startkapital, Zinsen, Zinssatz;
int Jahre, i, test;
printf("Startkapital (in Euro): ");
if (scanf("%f", &Startkapital) == 1)
{
int test = 0;
scanf("%c", &test);
if (test == '\n') {}
else {}
else {}
}
Ich bin mir sehr sicher das es so geht, es stellen sich mir - vorausgesetzt das stimmt so - dann 3 Fragen.
1. Wie erweitere ich das Programm das es erneut fragt ( die Einträge in den {} ).
2. Wie bringe ich es danach dazu, den korrekten Wert einzulesen und mit ihm zu rechnen.
3. Sollte nach jeder 'großen' if-Anweisung ein fflush kommen oder erledigt sich das ganze wenn im nächsten "if" die Variable "test" mit 0 initialisiert wird (siehe Versuch)?
Für zielführende hilfreiche Anregungen wäre ich danbar, am liebsten wäre es mir wenn sich jemand dem Programmcode kurz annimmt und ihn ensprechend ergänzt.
Thanks!
Nachtrag:
Inzwischen hab ich die Aufgabe mangels "Hilfe" in Eigenregie gelöst.
Da ich es hasse wenn Threads - ohne die Fragen beantwortet zu haben - enden, hier meine Lösung (es geht vielleicht eleganter, aber who cares?!)
Code:
#include <stdio.h>
int main (void)
{
double Kapital, Startkapital, Zinsen, Zinssatz;
int Jahre, i, test=0;
printf("Startkapital (in Euro): ");
while(1)
{
fflush(stdin);
if (scanf_s("%lf%c", &Startkapital,&test) == 2)
{
if (test == '\n')
{
break;
}
else
{
printf("Startkapital (in Euro): ");
}
}
else
{
printf("Startkapital (in Euro): ");
}
}
printf("Zinssatz (in Prozent): ");
while(1)
{
fflush(stdin);
if (scanf_s("%lf%c", &Zinssatz,&test) == 2)
{
if (test == '\n')
{
break;
}
else
{
printf("Zinssatz (in Prozent): ");
}
}
else
{
printf("Zinssatz (in Prozent): ");
}
}
printf("Laufzeit (in Jahren): ");
while(1)
{
fflush(stdin);
if (scanf_s("%d%c", &Jahre,&test) == 2)
{
if (test == '\n')
{
break;
}
else
{
printf("Laufzeit (in Jahren): ");
}
}
else
{
printf("Laufzeit (in Jahren): ");
}
}
printf("\n");
printf("Jahre | Zinsen | Kapital \n");
printf("----------------------------- \n");
Kapital = Startkapital;
i = 1;
while (i <= Jahre)
{
Zinsen = Kapital * Zinssatz / 100;
Kapital = Zinsen + Kapital;
printf("%5.0d | %8.2f | %10.2f \n",i,Zinsen,Kapital);
i++;
}
system("PAUSE");
return 0;
}
Zuletzt bearbeitet:
(Beispiele verbessert und Lösung hinzugefügt)