Почему удаление функции printf портит мой код? CS50 pset1 денежный жадный вызов - PullRequest
0 голосов
/ 18 июня 2019

Я закончил испытание, и мой первый код на C работал, по-видимому, хорошо, возвращая каждый раз правильное минимальное количество монет, необходимое для внесения изменений. Затем, когда я попытался немного «почистить» и удалить избыточный printf, похоже, все пошло не так. Я не могу разобраться с этим, я очень смущен ... Почему это происходит?

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

int q = 25; //variable for quarters
int d = 10; //dimes
int n = 5;  //nickels
int p = 1;  //pennies

int x;  //variable for final result
int r;  // variable for the reminder

float amount(string prompt);

int main(void)
{
    float a = amount("Enter dollar amount with format 0.00: $");
    int cents = round(a * 100);
    printf("Your input: $ %.2f", a);
    // printf(", which amounts to %i total.\n", cents); //WHY DELETING THIS LINE MESSES UP WITH THE FLOAT AND THE RESULT?

    x = cents / q;
    r = cents % q;

    x = x + (r / d);
    r = r % d;

    x = x + (r / n);
    r = r % n;

    x = x + (r / p);
    printf("%i\n", x);
    r = r % p;
    printf("%i\n", r);
}

float amount(string prompt)
{
    float a;
    do {
        a = get_float("%s", prompt);
    }
    while (a <= 0);
    return a;
}

1 Ответ

1 голос
/ 19 июня 2019

Это была маленькая вещь, но я просто не мог этого увидеть ... Удаление этого состояния без добавления разрыва строки привело бы к ответу сразу после ввода, поэтому оно выглядело для меня как загадочная лишняя цифра и пропущенное решение (смущающе, я знаю ... хах). В основном:

 $ ./cash3
Enter dollar amount with format 0.00: $1.12
7
0

... стал ...

Enter dollar amount with format 0.00: $1.12
Your input: $ 1.127
0

Иногда глядя на деревья, вы пропускаете весь лес. Спасибо Blauelf за его помощь и решение в этом!

...