C: Невозможно использовать операторы модулей, чтобы разбить изменения на деноминации, сохранить в массив и распечатать вывод для пользователя - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь написать программу, в которой:

  • Пользователь вводит стоимость товара
  • Пользователь вводит сумму, которую он заплатил за товар
  • Программа определяет, должен ли пользователь получить какое-либо изменение
  • Программа вычисляет сумму причитающегося изменения
  • Программа использует оператор модуля, чтобы разбить сумму изменения на номиналы монет
  • Программа сохраняет изменения и номиналы монет в массиве Это первый бит, в котором я застреваю
  • Программа отображает сумму изменений в номиналах монетпользователю

Цель состоит в том, чтобы использовать массив для хранения значений монет, чтобы я "мог написать калькулятор изменений общего назначения, который можно использовать для любой чеканки путем изменения содержимогомассив ".

Вот мой код:

void vendingMachine()
{

    // Declarations
    #define ARRAY_LENGTH 6

    int itemCost;
    int amountEntered;
    int fifty, twenty, ten, five, two, one; 
    int remainder;

    // User input

    printf("Please enter the cost of the item in pence: ");
    scanf_s("%d", &itemCost);
    while (itemCost <= 0 || itemCost > 99)
    {
        printf("You've entered an invalid amount. Please enter an amount between 1p and 99p: ");
        scanf_s("%d", &itemCost);
    }

    printf("Please enter the amount entered into the machine in pence: ");
    scanf_s("%d", &amountEntered);
    while (amountEntered <= 0 || amountEntered > 100)
    {
        printf("You've entered an invalid amount. Please enter an amount between 1p and 100p: ");
        scanf_s("%d", &amountEntered);
    }

    while (amountEntered < itemCost)
    {
        printf("You've entered an invalid amount. Please enter an amount equal to or higher than the cost of the item: ");
        scanf_s("%d", &amountEntered);
    }

    // Program to determine if the customer is owed any change and, if so, how much is owed

    if (amountEntered == itemCost)
    {
        printf("No change is owed to the customer");
    }
    else if (amountEntered > itemCost)
    {
        int change = amountEntered - itemCost;
        printf("The amount of change owed to the customer is: %d pence, broken down as follows: \n", change);

        fifty = change / 50;
        remainder = change % 50;
        twenty = remainder / 20;
        remainder = remainder % 20;
        ten = remainder / 10;
        remainder = remainder % 10;
        five = remainder / 5;
        remainder = remainder % 5;
        two = remainder / 2;
        remainder = remainder % 2;
        one = remainder;

         // Program to store the change in an array

        int count[ARRAY_LENGTH];
        count[0] = fifty;
        count[1] = twenty;
        count[2] = ten;
        count[3] = five;
        count[4] = two;
        count[5] = one;

        for (int i = 0; i < ARRAY_LENGTH; i++)
        {
             count[i] = 0;
        }

        for (int i = 0; i < ARRAY_LENGTH; i++)
        {
            printf("The number of %d coins is: %d\n", //I don't know what to do here);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Я не уверен, чего вы здесь добиваетесь:

Следующий фрагмент (вашего) кода устанавливает значения count от индекса 0 до индекса 5, начиная с fifty до one ..

int count[ARRAY_LENGTH];
count[0] = fifty;
count[1] = twenty;
count[2] = ten;
count[3] = five;
count[4] = two;
count[5] = one;

Тогда здесь вы перезаписываете те, которые 0 в цикле for.

for (int i = 0; i < ARRAY_LENGTH; i++)
{
     count[i] = 0;
}

Таким образом, вышеуказанный цикл не требуется или, по крайней мере, не должен быть помещен после , которым вы присвоили значения fifty, twenty, ten, five, two и one до count индексы массива.

Полагаю, вы пытаетесь их напечатать? Вам не нужно использовать цикл здесь:

// Doing it the newbie-way:

printf("The number of coins of 50 are: %d\n", count[0]);
printf("The number of coins of 20 are: %d\n", count[1]);
printf("The number of coins of 10 are: %d\n", count[2]);
printf("The number of coins of 5 are: %d\n", count[3]);
printf("The number of coins of 2 are: %d\n", count[4]);
printf("The number of coins of 1 are: %d\n", count[5]);
0 голосов
/ 12 ноября 2018

Храните тип монет в массиве, например,

const int coins[ARRAY_LENGTH] = { 50, 20, 10, 5, 2, 1 };

Тогда вы можете легко ссылаться на них в своем цикле:

printf("The number of %d coins is: %d\n", coins[i], count[i]);

Это также позволяет вам выполнять вычисления по модулю в цикле.

...