Problem beim Initialisieren der for schleife



  • Hallo.
    Ich bin gerade an einer weiter Bildung zum Techniker und muss nun Programmieren lernen. Meine Vorkenntnisse wahren vor der schule gleich null. Leider kenne ich keine Programmierer die mir weiter helfen könnten. Drum meine Frage an euch:

    Ich muss ein Programm schreiben das mir die Zinsen berechnet.
    Hier den aufgaben Text:

    "Schreiben Sie ein Programm, das zu einem gegebenen Anfangskapital bei einem vorgegebenem jährlichen Zinssatz berechnet, wie viele Jahre benötigt werden, damit das Kapital eine bestimmte Zielsumme überschreitet."

    Ich arbeite mit dem Buch von Jurgen Wolf "C von A bis Z" da habe ich ein ähnliches bespiel gefunden auf dem ich jetzt versuche aufzubauen. Im Beispiel im Buch ist aber das Anfangskapital und die Endsumme schon fix gegeben. jetzt möchte ich das aber mit einer variablen machen... Da beginnt aber mein Problem mit der Initialisierung der Variable "anfang"

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
       double anfang, ende;
       printf ("Der Zinssbeträgt 10%%\n");
       printf ("Geben Sie ihr Anfangs Kabital ein :\n ");
       scanf ("%.2f\n",& anfang); /*hier ggiebt mir der comieler auch eine fehler meldung*/
       fflush(stdin);
       printf ("Geben Sie nun ihr gewuenschtes Endkapital ein :\n");
       scanf ("%.2f\n",& ende);/*hier ggiebt mir der comieler auch eine fehler meldung*/
       fflush (stdin);
    
       for(anfang = anfang; anfang < ende; anfang = anfang * 1.1) /* fehler? */
          printf("%.2f\n", anfang);
       system("PAUSE");
       return 0;
    }
    

    Ich hoffe dass mir hier jemand weiter helfen kann. Das wäre echt super 🙂
    Besten Dank



  • bei scanf() braucht eine double-Variable den Formatspezifizierer %lf

    also

    scanf("%.2lf\n", &anfang);
    


  • Schöne Fehlermeldung.
    Wie lautet die?
    Oder war es eine Warnung?

    Im übrigen ist der Formatspecifier für double bei scanf ein %lf.

    scanf ("%lf", &anfang);
    

    Das anfang = anfang kannst du weglassen.

    Das Verhalten von fflush auf stdin ist nicht definiert.

    for( ; anfang < ende; anfang = anfang * 1.1)
    


  • Das Problem mit dem Initialisieren hat schon mal geklappt 🙂 Danke DirkB 🙂

    for( ; anfang < ende; anfang = anfang * 1.1)
    

    (und ich glaube auch zu verstehn wieso 🙂 )

    Aber was ich noch nicht ganz verstehe ist das Problem %.2lf Wenn ich den original Code aus dem Buch ausführe geht das aber bei mir nicht

    int main(void) {
       double zs;
       for(zs = 100.0; zs < 150.0; zs = zs * 1.1)
          printf("%.2f\n", zs);
       system("PAUSE");
       return 0;
    }
    


  • Was beteutet das?

    DirkB schrieb:

    Das Verhalten von fflush auf stdin ist nicht definiert.

    ich hab mal gelesen das man das nach jeder scanf() Eingabe machen sollte zum entleeren des Tastaturpuffers. Ist dem nicht so?



  • Tu dir einen gefallen, und such dir eine andere Lektüre, hier im Forum sind einige aufgelistet, zum lernen von C. Mit diesem Online-Tutorial habe ich auch angefangen C zu lernen, auf Grund dieses Forums bin ich dann sehr schnell auf eine Lektüre gewechselt, da ich im weiteren Verlauf dieses "Tutorials" nur noch Probleme hatte.
    Vieles was C angeht wird dort nur halb bis garnicht über falsch erklärt und der Stil von Herrn Wolf ist verwirrend, unverständlich, kurz gesagt: schlecht.

    Gerade wenn man keine Erfahrungen in der Programmierung hat und noch keine Efahrung in C, macht man damit mehr kaputt. Ich selbst habe 2 Monate gebraucht um mir den Schwachsinn daraus wieder abzugewöhnen.



  • Captain_Morgan schrieb:

    Aber was ich noch nicht ganz verstehe ist das Problem %.2lf Wenn ich den original Code aus dem Buch ausführe geht das aber bei mir nicht

    int main(void) {
       double zs;
       for(zs = 100.0; zs < 150.0; zs = zs * 1.1)
          printf("%.2f\n", zs);
       system("PAUSE");
       return 0;
    }
    

    printf() benutzt %f fuer double
    scanf() benutzt %lf fuer double



  • Captain_Morgan schrieb:

    Was beteutet das?

    DirkB schrieb:

    Das Verhalten von fflush auf stdin ist nicht definiert.

    ich hab mal gelesen das man das nach jeder scanf() Eingabe machen sollte zum entleeren des Tastaturpuffers. Ist dem nicht so?

    aus den FAQ:
    http://www.c-plusplus.net/forum/viewtopic.php?t=39349



  • Nirvash schrieb:

    Tu dir einen gefallen, und such dir eine andere Lektüre, hier im Forum sind einige aufgelistet, zum lernen von C. Mit diesem Online-Tutorial habe ich auch angefangen C zu lernen, auf Grund dieses Forums bin ich dann sehr schnell auf eine Lektüre gewechselt, da ich im weiteren Verlauf dieses "Tutorials" nur noch Probleme hatte.
    Vieles was C angeht wird dort nur halb bis garnicht über falsch erklärt und der Stil von Herrn Wolf ist verwirrend, unverständlich, kurz gesagt: schlecht.

    Gerade wenn man keine Erfahrungen in der Programmierung hat und noch keine Efahrung in C, macht man damit mehr kaputt. Ich selbst habe 2 Monate gebraucht um mir den Schwachsinn daraus wieder abzugewöhnen.

    Danke für deinen Rat ich werde mich mal umschauen für eine neue Lektüre. Kannst du gerade was empfehlen? Es ist nur schade dass das unser Schulbuch ist und ich nicht darum komme es zu benützen 😞



  • @ gigg
    Wenn ich aber di fflush (stdin) raus nehme leuft das programm nicht mehr. es kommt nicht mehr in die <<for>> schleife und spring direkt zum ende.

    Ein schuhl freund hat mir gerade geschriben das er fflush(stdout) verwendet vor dem scanf() was ist da genau der unterschiet zu fflusch(stdin)?



  • Eine alternative Moeglichkeit steht in den FAQ. Es ist der 2. Kommentar in dem Link, den ich geschickt habe.



  • Captain_Morgan schrieb:

    Wenn ich aber di fflush (stdin) raus nehme leuft das programm nicht mehr. es kommt nicht mehr in die <<for>> schleife und spring direkt zum ende.

    Sicher?
    Oder schließt sich nur ganz schnell das Ausgabefenster?

    Wenn du das fflush(stdin) wegläßt, bleibt noch das Zeichen von der Enter-Taste im Eingabestrom stehen. Dies wird dann gleich vom system("PAUSE"); eingelesen und das Programm beendet.

    Wenn man weiß, wie scanf funktioniert (bei welchen Zeichen im Formatstring was passiert) gibt es da eigentlich keine Probleme.
    Ein großes Problem bleiben aber Fehleingaben vom Benutzer.

    printf und scanf sind zwei unterschiedlich Funktionen, deren Formatspecifier teilweise die gleiche Bedeutung haben.
    Du kannst also nicht von der einen Funktion auf die andere schließen.



  • Danke für eure Hilfe 🙂 hab das Programm zwar den Bach abgelassen aber trotz dem viel gelernt dabei. ich bin das ganze Projekt viel zu kompliziert angegangen...

    lg


Anmelden zum Antworten