Моя программа генератора проверок работает безупречно для любого ввода, который вы даете ему, чтобы он выводил цифры в словах. например, если бы я ввел «1234,56», он выпустит «Одна тысяча триста тридцать четыре доллара и ... 56 центов». Однако всякий раз, когда я хочу вывести что-то вроде «1000», он выведет «One Thousand Zero Dollars и ... 0 Cents». Очевидно, что это не 1000 нулевых долларов. Центы прекрасны, но я хочу избавиться от этого «нуля», но мне нужно, чтобы там были такие моменты, как если бы вы набрали «0.01». Он выдавал «Нулевые доллары и 1 цент ".Как сделать мой генератор контрольных выходов именно тем, что он вместо «нуля» в C
Код выглядит следующим образом:
#include <stdio.h>
void printNum(int);
void printNum2(int);
int main()
{
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int num = 0;
int printcents; //To convert the float "cents" to an integer.
float inclusive;
float cents;
printf("Welcome to the IPC144 Cheque Generator!!\n");
printf("PAY TO THE ORDER OF... amahmood29 (018359133)\n");
printf("Enter a monetary value from $0.01 to $9999.99 inclusive: ");
scanf("%f", &inclusive);
if(inclusive < 0.00 || inclusive >= 10000.00) {
printf("Sorry, cannot create cheque for that amount, try again next time!\n");
}
else
{
a = inclusive/1000; //This data is replacing our variable by diving whatever the vaulue is by either 1000, 100, 10.
inclusive = inclusive - (a*1000);
b = inclusive/100;
inclusive = inclusive - (b*100);
if (inclusive > 19){
c = inclusive/10;
inclusive = inclusive - (c*10);
}
else
{
c = inclusive;
d = 0;
}
d = inclusive;
num = inclusive;
cents = (inclusive - num)*100; //To calculate our "Cents" with numerals.
printcents = cents;
/*Printing if the variables are in the thousands, hundreds, tens or ones categories.*/
if (a > 0){
printNum(a);
printf("Thousand ");
}
if (b > 0){
printNum(b);
printf("Hundred ");
}
printNum2(c);
if (d > 0){
printNum(d);
printf("Dollars and ... ");
}
else if (d == 0){
printf("Zero Dollars and ... ");
}
printf("%d", printcents);
printf(" Cents\n");
}
}
void printNum(int x) //Created functions to easily output various if statements.
{
if (x == 1)
printf("One ");
else if (x == 2)
printf("Two ");
else if (x == 3)
printf("Three ");
else if (x == 4)
printf("Four ");
else if (x == 5)
printf("Five ");
else if (x == 6)
printf("Six ");
else if (x == 7)
printf("Seven ");
else if (x == 8)
printf("Eight ");
else if (x == 9)
printf("Nine ");
}
void printNum2(int x)
{
if (x == 10)
printf("Ten ");
else if (x == 11)
printf("Eleven ");
else if (x == 12)
printf("Twelve ");
else if (x == 13)
printf("Thirteen ");
else if (x == 14)
printf("Fourteen ");
else if (x == 15)
printf("Fifteen ");
else if (x == 16)
printf("Sixteen ");
else if (x == 17)
printf("Seventeen ");
else if (x == 18)
printf("Eighteen ");
else if (x == 19)
printf("Ninteen ");
else if (x == 2)
printf("Twenty ");
else if (x == 3)
printf("Thirty ");
else if (x == 4)
printf("Forty ");
else if (x == 5)
printf("Fifty ");
else if (x == 6)
printf("Sixty ");
else if (x == 7)
printf("Seventy ");
else if (x == 8)
printf("Eighty ");
else if (x == 9)
printf("Ninety ");
}
Изменить 'else if (d == 0) {' -> 'else if (d == 0 && c == 0 && b == 0 && a == 0) {' – chux
Сохранение валюты или любой другой значение, требующее точной точности, в 'float' редко является хорошей идеей, поскольку число с плавающей запятой _binary_ не может точно представлять _decimals_. 'double', вероятно, будет достаточным для _displaying_ значений, которые бы реально выполняли проверку, но даже в этом случае было бы лучше использовать десятичный тип (для этого использования вы могли бы легко сделать десятичное представление с фиксированной точкой, просто используя целое число центов). – Arkku
Отказ от правильного кода сделает его намного легче читать. Выход, когда сумма была неправильной, позволит избежать уровня отступа. –