Почему мой код CS50 не работает и почему мой код постоянно переполняется или имеет значение 1? - PullRequest
0 голосов
/ 21 марта 2020

Я работаю над "жадным" аль go в CS50. Я не уверен, что не так, но он продолжает давать мне значение 1 или переполняется при вводе значения.

Пожалуйста, см. Ниже:

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

int main(void)
{
     //define variables
     float change;
     do
     {
         change=get_float("change: ");
     }
      while(change<= 0);
     // change float to integer define variable

     int amount = round (change*100);
     // define the possible coins with each situation
      int a1,b,c,d;
      a1=amount/25;
      b=(amount-a1*25)/10;
      c=(amount-a1*25-b*10)/5;
      d=(amount-a1*25-b*10-c*5)/1;
    //

     while (amount>=25)
     {
         int a1_count++;
     }
     while (amount>10&&amount<25)
     {
         int b_count++;
     }
     while (amount>5&&amount<10)
      {
         int c_count++;
      }
      while ( amount>1&& amount<5)
      {
         int d_count++;
      }
      // total of the coins been used 
      int coins= a1_count+b_count+c_count+d_count;
      printf("number of coins given: %i\n",coins);
}

1 Ответ

1 голос
/ 21 марта 2020

Вы инициализируете свои значения "count" внутри своих циклов while, поэтому каждый раз, когда l oop запускает его, создается переменная count, локальная для этого l oop.

Когда l oop означает, что переменная уничтожена, то есть вы не можете получить к ней доступ, пока l oop.

int main(void)
{
     //define variables
     float change;
     do
     {
         change=get_float("change: ");
     }
      while(change<= 0);
     // change float to integer define variable

     int amount = round (change*100);
     // define the possible coins with each situation
      int a1,b,c,d;
      a1=amount/25;
      b=(amount-a1*25)/10;
      c=(amount-a1*25-b*10)/5;
      d=(amount-a1*25-b*10-c*5)/1;
    //
    int a1_count = 0, b_count = 0, c_count = 0, d_count = 0;
    while (amount>=25)
    {
        a1_count++;
        amount -= 25;
    } 
    while (amount>10&&amount<25)
    {
        b_count++;
        amount -= 10;
    } 
    while (amount>5&&amount<10)
    {
        c_count++;
        amount -= 5;
    } 
      while ( amount>1&& amount<5)
      {
        d_count++;
        amount -= 1;
      }
      // total of the coins been used 
      int coins= a1_count+b_count+c_count+d_count;
      printf("number of coins given: %i\n",coins);
}
...