Прсто не понимаю откуда такой результат. Может кто объяснит как это работает, кажется я не понимаю что-то очевидное но вот что

#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;
}
→ Ссылка