Programm erneut ausführen .... do while ....
-
hi @ll,
folgendes Problem.... und zwar geht bei diesem Programm die abfrage net so richtig, bei der gefragt wird ob das proggi beendet werden soll..... find den fehler einfach net ..., währ super, wenn mir jemand helfen könte, und sagen könnt, wo sich der fehler eingeschliechen hatDanke schonma
---
#include <conio.h>
#include <stdio.h>
#include <math.h>float k,t,p,ergebnis;
char j;void eingabe()
{
printf("Kapital: ");
scanf("%f", &k);printf("Zeitraum (Jahre): ");
scanf("%f", &t);printf("Prozentsatz: ");
scanf("%f", &p);}
void berechnung()
{
float erg,e;printf("\n");
e=1+p/100;
erg=pow(e,t);
ergebnis=erg*k;
}void ausgabe()
{
printf("Zinseszinsen: %f", ergebnis);
}void nochma()
{
printf("\n\nProgramm (B)eenden ?\n");
j=getch();
}main()
{
printf("Zinseszinsberechnung\n");
printf("====================\n\n");j='e';
do
{
eingabe();
berechnung();
ausgabe();
nochma();
}
while(j!='b' || j!='B');}
--
_____________________
MfG chaosLT
-
Schau dir deine do-while-schleife in main() an und überlege nochmal, wann genau die bedingung erfüllt ist und die schleife verlassen wird!
Und gewöhne dir bitte an, in ANSI C
int main(int argc, char *argv[]) { ... return 0; }
zu schreiben!
Empfehlenswert wäre auch, nach jedem scanf-aufruf ein fflush(stdin); oder while(getchar()!='\n'); zu schreiben, um im eingabepuffer das '\n' zu "entfernen".
Beim code-posten bitte auch die cpp-tags verwenden, das dein code leserlicher wird!
-
curry-king schrieb:
Empfehlenswert wäre auch, nach jedem scanf-aufruf ein fflush(stdin)...
Bitte in der FAQ nachlesen, warum man genau das NICHT machen sollte!
Um die lästigen \n zu vermeiden kann man am Ende des Formatstrings das \n angeben, aber besser wäre die Variante, dass man generell für das Einlesen nur fgets() verwendet und die Daten dann aus dem eingelesenen String rausholt.
-
curry-king schrieb:
Empfehlenswert wäre auch, nach jedem scanf-aufruf ein fflush(stdin);
Lieber gleich fgets() für Eingaben nehmen...
Edit: O.K. ich sollte mir angewöhnen die Fenster nicht ewig ofenzulassen bevor ich darauf antworte
-
TactX schrieb:
curry-king schrieb:
Empfehlenswert wäre auch, nach jedem scanf-aufruf ein fflush(stdin);
Ok, dann bin ich dankbar für diesen Rat
Spricht irgendetwas ausser der verbrutzelten cpu-zeit gegenwhile(getchar()!='\n');
?
-
TactX schrieb:
Edit: O.K. ich sollte mir angewöhnen die Fenster nicht ewig ofenzulassen bevor ich darauf antworte
-
könnte sich vielleicht auch nochma jemand um "MEIN" problem kümmern, ich komm einfach net dahinter, was ich falsch gemacht hab
-
curry-king schrieb:
Schau dir deine do-while-schleife in main() an und überlege nochmal, wann genau die bedingung erfüllt ist und die schleife verlassen wird!
Ich kanns gerne nochmal wiederholen. 'DEIN' Fehler ist die Bedingung der do-while-schleife in main()!
-
hmmm kann mir das ma jemand richtig aufschreiben .... ich bekomms etinfach net hin.... was ist an der bedingung falsch .... ich sage doch praktisch....
die schleife geht weiter solange was anderes als b oder B eingegebenn wird ..
????
greets
-
Statt || gehört da wohl && hin würd ich mal sagen. Dann macht die Bedingung genau das was du willst.
-
chaosLT schrieb:
die schleife geht weiter solange was anderes als b oder B eingegebenn wird ..
Falsch! Die Schleife wird nie verlassen, da die Variable nur einen Wert
aufnehmen kann und nicht 'b' und 'B' gleichzeitig!
-
chaosLT schrieb:
die schleife geht weiter solange was anderes als b oder B eingegebenn wird ..
Falsch die Bedingung lautet folgendermaßen:
Laufe solange die Variable einen Wert ungleich b hat ODER solange die Variable einen Wert ungleich B hat.
Nehmen wir als Beispiel an, dass b eingegeben wurde.
Bei der ersten Teilbedingung kommt FALSCH raus, da es sich ja um das kleine b handelt.
Allerdings kommt bei der zweiten Teilbedingung WAHR raus, da ein kleines b kein großes B ist.
Nun verknüpfen wir das mit ODER, dann kommt raus FALSCH oder WAHR = WAHR.
-
sehr anschaulich