[Gelöst]Variable wird nicht aktualisiert



  • Hi! Ich bin absoluter C-Anfänger und übe gerade ein wenig...

    Bei folgendem Programm besthet das Problem, dass die variable "jahre" am Ende nicht durch die while-Schleife verändert wird. Es wird immer der Initialisierungswert ausgegeben - Hier also "0".

    Könnt ihr mir bitte sagen, wo ich meinen Denkfehler habe...

    #include <stdio.h>
    
    main(){
    	double sKapital, eKapital, zSatz;
    	int jahre = 0;
    
    	printf("\nGeben Sie das Startkapital ein: ");
    	scanf("%f",&sKapital);
    	printf("\nGeben Sie das Endkapital ein: ");
    	scanf("%f",&eKapital);
    	printf("\nGeben Sie den Zinssatz ein : ");
    	scanf("%f",&zSatz);
    
    	while(sKapital<eKapital){
    		jahre++;
    		sKapital+=sKapital*(zSatz/100);
    	}
    	printf("\nEs dauert %i Jahre.",jahre);
    }
    

    DANKE!!! Bin schon gespannt und freue mich auf meinen nächsten "AHA-"Moment 😉





  • Dann wird deine Schleife nicht durchlaufen, da die Laufbedingung nicht erfüllt ist.
    Das mag daran liegen, dass du bei scanf die falschen Formatspecifier für double-Variablen genommen hast. Die sind nicht %f (für float) sondern %lf (kleines LF).

    Es ist immer gut die Eingabewerte nochmal zur Kontrolle auszugeben.

    Bei printf jedoch sind die Formatspecifier für float und double identisch: %f



  • Das Programm ist soweit OK, wenn auch nicht standardkonform und laienhaft.
    Wahrscheinlich machst du falsche double-Eingaben, mache mal Kontrollausgaben deiner double-Werte vor der Schleife.
    Das könntest du dir ersparen, wenn du den Rückgabewert von scanf auswerten und anschließend jeweils den Eingabepuffer löschen würdest.


  • Mod

    Schuss ins Blaue: Du gibst die Fließkommazahlen mit einem Komma statt einem Punkt als Dezimaltrennzeichen ein?



  • @Wutz, SeppJ: Was sollen denn diese Spekulationen? Glaubt ihr nicht, dass es an dem %f liegt?



  • Hey vielen Dank!

    Das Abändern in "lf" ist die Lösung! Oje ist wohl noch ein langer Weg 😉

    printf("\nGeben Sie das Startkapital ein: ");
     scanf("%lf",&sKapital);
     printf("\nGeben Sie das Endkapital ein: ");
     scanf("%lf",&eKapital);
     printf("\nGeben Sie den Zinssatz ein : ");
     scanf("%lf",&zSatz);
    

    DANKE! Ich werde bestimmt noch öfter solche "dummen" Fragen stellen (müssen).

    MfG


  • Mod

    Bashar schrieb:

    @Wutz, SeppJ: Was sollen denn diese Spekulationen? Glaubt ihr nicht, dass es an dem %f liegt?

    Ähh, jetzt wo ich es sehe, doch. Ich hatte gerade keinen Compiler da, mit dem ich sonst nach dieser Art Fehler suche.

    P.S.: An den Threadersteller gerichtet: Aus meinem obigen Absatz kannst du entnehmen, dass mein Compiler mir automatisch solche Fehler findet. Kann deiner bestimmt auch. Du musst ihm nur erlauben, dich zu warnen, da diese Art Fehler in C im Prinzip ein gültiges Programm ist (wenn auch kein sehr sinnvolles). Mach dich mal kundig, wie du die Warnungen auf maximales Niveau setzt und behandle Warnungen wie Fehler.



  • Hey SeppJ, danke für die Info - ich schaue mal wo ich das in Eclipse CDT einstellen kann. Unter "Preferences" > "C/C++" > "Code Analysis" ist alles ausgewählt



  • SeppJ schrieb:

    Ich hatte gerade keinen Compiler da, mit dem ich sonst nach dieser Art Fehler suche.

    Der sitzt bei mir links und rechts der Nase 😉 Außerdem hatte DirkB die Antwort schon gegeben.


Anmelden zum Antworten