Прсто не понимаю откуда такой результат. Может кто объяснит как это работает, кажется я не понимаю что-то очевидное но вот что
#include <stdio.h>
#include <cs50.h>
#include <math.h>
int main(void)
{
int dollars;
int coins1;
int quarter = 25;
int dime = 10;
int nickel = 5;
int penny = 1;
do
{
dollars = get_float("Введите сумму\n");
}
while(dollars <= 1);
int cents = round(dollars * 100);
for (int coins = 0 ; cents > 0; coins++)
{
if(cents >= 25)
{
cents = (cents - quarter);
}
else if(cents >= 10)
{
cents = (cents - dime);
}
else if(cents >= 5)
{
cents = (cents - nickel);
}
else if(cents >= 1)
{
cents = (cents - penny);
}
else
{
coins1 = coins;
}
}
printf("%i\n", coins1);
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
А вы уверены, что обязательно выскочите в ветвь, в которой выполняется coins1 = coins;?
А если подумать?
Цикл работает, пока cents > 0. А пока это так - хода в последний else нет. А как только cents становится равной нулю, выполняется выход из цикла, и coins1 так и остается неинициализированной локальной переменной.
Кстати, тот же VC++ выдает соответствующее предупреждение - о потенциально неинициализированной переменной.
И вообще, я бы писал так:
int coins(int cents)
{
const int val[] = { 25, 10, 5, 1 };
int cnt = 0;
for(int i = 0; i < sizeof(val)/sizeof(val[0]); ++i)
{
cnt += cents/val[i];
cents %= val[i];
}
return cnt;
}