Во-первых, избегайте повторения кода:
Это:
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;
И избегайте цепей, это на самом деле не стоит, и вам будет тяжело потом, если вам придется измениться по какой-то причине.