Почему циклы в моей программе не завершаются?

Мой код предназначен для отображения наименьшего количества монет, которое потребуется человеку для определенной суммы денег. Я преобразовал значение в центы, а затем использовал циклы для проверки каждой монеты. Вы можете увидеть printf для переменных, которые я использовал для целей тестирования, чтобы увидеть, где что-то пошло не так. Циклы просто продолжаются вечно и не вычитают значение C столько раз, сколько повторяется цикл. бывший. c-25 остается на уровне 475 центов, а не уменьшается на 25 каждый раз, когда цикл повторяется (для стоимости 5,00 долларов США).

#include <stdio.h>
#include <cs50.h>
#include <math.h>

int main(void)
{
float c=0;
int i=0;
int y=0;

    printf("How much change do you owe?\n");
    c=GetFloat();
    c=c*100;
    printf("%f\n", c);
    do
    {
        c-25;
        printf("%d\n", c-25);
        if (c>25)
        {
            i++;
            printf("%d\n", i);
        }
    }
        while (c>=25);
    printf("%d\n", i);

    do
    {
        y=c-10;
        if (y>0)
        {
            i++;
        }
    }
        while (y>10);
    if (y<=10)
    {
        printf("%d\n", i);
    }
    do
    {
        y=c-5;
        if (y>0)
        {
            i++;
        }
    }
        while (y>5);
    if (y<=5)
    {
        printf("%d\n", i);
    }
    do
    {
        y=c-1;
        if (y>0)
        {
            i++;
        }
    }
        while (y>1);
    if (y==0)
    {
        printf("%d\n", i);
    }
}

Примечание. Это относится к программе "Время перемен" в CS50


person SKammala    schedule 06.09.2015    source источник
comment
Не используйте float, если вам нужны точные значения!   -  person too honest for this site    schedule 06.09.2015


Ответы (2)


c никогда не меняется.

Нет никакого эффекта в заявлении:

c-25;

что, вероятно, должно быть:

c = c - 25;

or

c -= 25;
person MByD    schedule 06.09.2015

Вот несколько замечаний по вашему коду:

#include <stdio.h>
#include <cs50.h>
#include <math.h>

int main(void){
// use self-explanatory and meaningful names of your variables 
float c = 0;
int i = 0;
int y = 0;

// input
printf("How much change do you owe?\n");
c = GetFloat();
c = c * 100;
// print input
printf("%f\n", c);

// add comment explaining the purpose of this loop 
do{
    c = c - 25; // corrected to decrement by 25

    printf("%d\n", c);
    if (c > 25){
        i++; 
        printf("%d\n", i);
    }
}while(c >= 25);

printf("%d\n", i);

// add comment explaining the purpose of this loop 
do{
    y = c - 10;
    if (y > 0){
        i++;
    }
}while(y > 10);

// add comment explaining the purpose of this condition statement
if (y <= 10){
    printf("%d\n", i);
}

// add comment explaining the purpose of this loop
do{
    y = c-5;
    if (y > 0){
        i++;
    }
}while(y > 5);

// add comment explaining the purpose of this condition statement
if (y <= 5){
    printf("%d\n", i);
}

// add comment explaining the purpose of this condition statement
do{
    y = c-1;
    if (y > 0){
        i++;
    }
}while(y > 1);
// add comment explaining the purpose of this condition statement
if(y == 0){
    printf("%d\n", i);
}
}

Основные проблемы возникают из-за условий завершения и увеличения/уменьшения переменных-счетчиков, которые неверны или отсутствуют, что приводит к бесконечным циклам.

person Ziezi    schedule 06.09.2015