ЕСЛИ условие не работает должным образом - C Язык - PullRequest
0 голосов
/ 03 марта 2019

У меня есть следующий код, в котором условие if, кажется, не работает должным образом.

Например, если я введу 0,29, результаты выдаются

Кварталы:1 центов: 0 никелей: 4205264 пенсов: 4

Как вы можете видеть, это неправильно, как после первого оператора if, выполненного 'if (cents> = 25)', из-за этого останется остаток 4, который сохраняетсяв переменной «центы».Это должно означать, что следующие два оператора «IF» возвращают «0», а последний оператор if выполняется «if (cents> = 1)».Однако это не тот случай, так как вы можете видеть, что Никлес возвращает значение 4205264.

Когда вы вводите 1.17, результат возвращается, как и ожидалось:

Кварталы: 4 Даймы: 1 Никель: 1Копейки: 2

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

int main(void)
{
float dollars;
int cents;
int quartersUsed;
int dimesUsed;
int nickelsUsed;
int penniesUsed;

do 
{ 
    dollars = get_float("Float: ");

    while (dollars <= 0) {
        dollars = get_float("Float: ");
    }

    cents = roundf(dollars * 100);
    printf("%i\n", cents);

    if (cents >= 25) {
        quartersUsed= cents / 25;
        cents = cents % 25;
    } 

    if (cents >= 10) {
       dimesUsed = cents / 10;
       cents = cents % 10;
    } 

    if (cents >= 5) {
       nickelsUsed = cents / 5;
       cents = cents % 5;
    } 

    if (cents >= 1) {
       penniesUsed = cents / 1;
       cents = cents % 1;
    } 

    printf("Quarters: %i\n",quartersUsed);
    printf("Dimes: %i\n",dimesUsed);
    printf("Nickels: %i\n",nickelsUsed);
    printf("Pennies: %i\n",penniesUsed);


}
while (dollars == false);

}

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Обратите внимание, что ваши предложения if не только не нужны, так как они также могут позволить печатать некоторые из ваших переменных неинициализированными (что, вероятно, является причиной проблемы в ваших выходных данных). И так же, как вам не нужны все эти проверки условий, вам не нужны все эти переменные.Помните, что программисты на Си стремятся, по возможности, сосредоточиться на экономии операций и пространстваПроверьте мою реализацию ниже, сравните ее с вашей и попытайтесь угадать, сколько операций и места она экономит.(Поскольку вы не опубликовали свою библиотеку "cs59.h", я прокомментировал ее и реализовал функцию "get_float", которая всегда возвращает "1.17".)

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

float get_float(const char *)
{
    return 1.17;
}

int main()
{
    float dollars;
    while((dollars = get_float("Float: ")) <= 0);

    int cents = (int) roundf(dollars * 100);
    printf("%i\n", cents);

    printf("Quarters: %i\n", cents / 25);
    printf("Dimes:    %i\n", (cents = cents % 25) / 10);
    printf("Nickels:  %i\n", (cents = cents % 10) / 5);
    printf("Pennies:  %i\n", cents % 5);

    return 0;
}
0 голосов
/ 03 марта 2019

Вам нужно инициализировать переменные, потому что, если вы не введете в блок if то, что происходит в вашем примере, вы закончите печать переменной, которая никогда не инициализировалась.

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

...