Я хочу поместить свой if-else в регистр переключателя, но вывод не показывает правильный результат, который должен быть - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь поместить if-else в корпус переключателя, он работает, но проблема в том, что результат вычисления неверен

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
    int unit, disc, total, discprice, caseof;
    int a = 99;

    cout << "Enter number of units sold: ";
    cin >> unit;

    if (unit > 10 && unit < 19) 
    {
        unit = '1';
    }

    if (unit > 20 && unit < 49) 
    {
        unit = '2';
    }
    if (unit > 50 && unit < 99)
    {
        unit = '3';
    }
    if (unit > 100) 
    {
        unit = '4';
    }
    else if (unit <= 10) 
    {
        cout << "Number of units sold" << endl;
        cout << "Total amount of units: RM" << total << endl;
    }
    switch (unit)
    {
    case '1':
        total = unit * a;
        disc = total * 0.3;
        discprice = total - disc;
        cout << "Number of units sold= " << unit << endl;
        cout << "Total amount of units: RM" << total << endl;
        cout << "Total amount after 30% discount is RM" << discprice << endl;
        break;

    case '2':
        total = unit * a;
        disc = total * 0.3;
        discprice = total - disc;
        cout << "Number of units sold= " << unit << endl;
        cout << "Total amount of units: RM" << total << endl;
        cout << "Total amount after 30% discount is RM" << discprice << endl;
        break;

    case '3':
        total = unit * a;
        disc = total * 0.4;
        discprice = total - disc;
        cout << "Number of units sold= " << unit << endl;
        cout << "Total amount of units: RM" << total << endl;
        cout << "Total amount after 40% discount is RM" << discprice << endl;
        break;

    case '4':
        total = unit * 2;
        disc = total * 0.5;
        discprice = total - disc;
        cout << "Number of units sold= " << unit << endl;
        cout << "Total amount of units: RM" << total << endl;
        cout << "Total amount after 50% discount is RM" << discprice << endl;
        break;

    }

    return 0;
}

Ожидаемый результат должен рассчитываться и показывать цену со скидкойтовары.Пример: Когда я указываю 15 в качестве единицы в программе, количество проданных единиц должно появиться как 15 и использовать вариант 1, чтобы умножить 0,2 и показать цену со скидкой.Вместо этого он показывает 49 в количестве проданных единиц.

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Во-первых, избегайте повторения кода: Это:

total = unit * 2;
        disc = total * 0.5;
        discprice = total - disc;
        cout << "Number of units sold= " << unit << endl;
        cout << "Total amount of units: RM" << total << endl;
        cout << "Total amount after 50% discount is RM" << discprice << endl;

может стать примерно таким

total(units, 2, 0.5);

где-то еще вы можете использовать: всего (ед., а, 0,3);

Объявление функции как:

void compute_total(int units, int correction, float disc_ratio ){
...
} 

Это сильно очищает ваш код. Во-вторых, c типы имеют значение. Блок int имеет размер int (как минимум, два байта), а в некоторых архитектурах это может быть не то, что вы ожидаете, давая ему символьный литерал '1' (обычно 1 байт).

Другое преобразование типов происходит, когда вы набираете * 0,3, должно возвращаться 445,5, но округляется до 445 всего = 15 * 99 всего * 0,3,

Наконец, ваша цепочка if не работает так, как ожидалось. Это реальная проблема, 49 - это ASCII для «1», так как вы переназначаете единицу, вы фактически даете ей значение 49.

Если вы связываете свои if с elses как: if () иначе if ()
все еще не решит это. Я советую вам не переназначать переменную единиц, создавать новую, скажем, "char pricing_strategy".

Обратите внимание, что вы можете сделать вручную случай 1: случай 2: ... случай 10: разрыв кода; дело 11: ...; дело 100: ... перерыв; по умолчанию: //> 100 break; И избегайте цепей, это на самом деле не стоит, и вам будет тяжело потом, если вам придется измениться по какой-то причине.

0 голосов
/ 01 мая 2019

Это почти просто проблема с опечатками, но вы определили unit как int, но вы фактически присваиваете ему символьные литералы. Вместо:

int unit = '1';

вы должны использовать:

int unit = 1;

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

switch (unit - '0')
{
    case 1:
        // case 1
        // etc., using unit - '0' everywhere for the actual unit integer value
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...