2015-06-13 3 views
1

Моя программа генератора проверок работает безупречно для любого ввода, который вы даете ему, чтобы он выводил цифры в словах. например, если бы я ввел «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 "); 
} 
+1

Изменить 'else if (d == 0) {' -> 'else if (d == 0 && c == 0 && b == 0 && a == 0) {' – chux

+3

Сохранение валюты или любой другой значение, требующее точной точности, в 'float' редко является хорошей идеей, поскольку число с плавающей запятой _binary_ не может точно представлять _decimals_. 'double', вероятно, будет достаточным для _displaying_ значений, которые бы реально выполняли проверку, но даже в этом случае было бы лучше использовать десятичный тип (для этого использования вы могли бы легко сделать десятичное представление с фиксированной точкой, просто используя целое число центов). – Arkku

+0

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

ответ

1

Различных вычитания как inclusive = inclusive - (c*10) страдают ошибки округления и, следовательно, имеют небольшое количество осталось, делая if (d > 0).

Предложить округление до ближайшего 0,01. Пример: inclusive = round(100*(inclusive - (c*10)))/100.0 и другие места.

Или повторите все в целых числах центов.