如何使我的检查生成器输出准确的内容而不是 C 中的 "Zero"

How to make my cheque generator output exactly what it is instead of "Zero" in C

我的支票生成器程序可以完美地处理您提供的任何输入,使其输出文字中的数字。例如,如果我输入“1234.56”,它会输出 "One Thousand Two Hundred Thirty Four Dollars and ... 56 Cents"。但是,每当我想输出类似“1000”的内容时,它都会输出 "One Thousand Zero Dollars and ... 0 Cents"。显然它不是 1000 零美元,美分非常好,但是我希望摆脱那个 "Zero" 但我需要它在那里的时刻,例如如果你要输入“0.01”它会输出 "Zero Dollars and 1 Cent".

代码如下:

#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 [=11=].01 to 99.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 ");
}

inclusive = inclusive - (c*10) 这样的各种减法都存在舍入误差,因此在执行 if (d > 0) 时只剩下很少的量。

建议四舍五入到最接近的 0.01。示例:inclusive = round(100*(inclusive - (c*10)))/100.0等地

或者全部重做整数美分。