Hjälp med ett C-program!
Hej,
Jag har stött på ett problem i ett relativt enkelt C-program och undrar om någon förstår varför det blir så?
Använder boken "Vägen till C", Jan Skanshom (http://skansholm.com/vagen_c/index.html). I uppgift 4, kapitel 2 ska man skriva ett program hur många dagar det tar att tjäna ihop 1 miljon kr, om man får lön 1 öre första dagen, 2 ören andra dagen, 4 ören tredje dagen, 8 ören fjärde dagen osv.
Så här ser koden ut enligt lösningar till övningsuppgifter (se länk ovan):
/* 2_4.c */
#include <stdio.h>
#define SLUTSUMMA 1000000.0
int main()
{
int dag = 0;
float sum = 0, lon = 0.01;
while (sum < SLUTSUMMA) {
sum = sum + lon;
lon = 2*lon;
dag++;
}
printf("Han måste jobba %d dagar för %.0f kr.\n", dag, SLUTSUMMA);
}
När man kör koden får man svaret 27 dagar! Det må vara rätt.
MEN!
Jag testade att ändra lite i koden för att kolla att while-loopen stämmer.
Se nedan:
#include <stdio.h>
#define SLUTSUMMA 0.03 /*Hur många dagar tar det att tjäna 3 ören?? */
int main()
{
int dag = 0;
float sum = 0, lon = 0.01;
while (sum < SLUTSUMMA) {
sum = sum + lon;
lon = 2*lon;
dag++;
}
printf("Han måste jobba %d dagar för %.2f kr.\n", dag, SLUTSUMMA);
}
Vi kan själv räkna ut att om han får 1 öre första dagen och 2 ören andra dagen så har han totalt 3 ören efter 2 dagar.
Problemet när man kör denna koden är att man får som resultat att han har 3 ören efter 3 dagar.
Varför är det så? Det verkar som att while-satsen utförs en extra gång trots att villkoret sum < SLUTSUMMA inte gäller.
Kan någon snälla förklara var felet är? Har det med att man inte får använda makron som jämförelse i while-satsen?
Tacksam för svar.
Edit: Snyggade till inlägget så att koden syns inramad för tydlighetens skull.
För lösning till problemet, se inlägg #2 samt #10 av Yoshman!