2015-06-13 2 views
1

В приведенном ниже коде я сделал программу, которая может сделать сумму денег, которую вы передаете в слова. Например, «1234,56» превращаются в «Тысячу две сотни тридцать четыре и ... 56 центов». Дело в том, что, когда я пытаюсь ввести сумму «0.01» в мой scanf, результат становится «Доллары и ... 1 Центы», когда он должен выводить «Нулевые доллары и ... 1 цент». Пожалуйста помоги!Как сделать инструкцию if if правильной программой printf 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 (c == 0 && b == 0 && a == 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("Nineteen "); 
    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 "); 
} 
+0

'printf (« Доллары и ... »);' -> 'printf (« Нулевые доллары и ... »);'? – twentylemon

+0

'printNum (d)' when 'd == 0' становится' printNum (0) '. Внутри 'void printNum (int)' у вас есть все числа, за исключением '0', поэтому он бесшумно выходит из функции без печати. Вы должны изменить условие 'if (d> 0)' вместо 'if (d> = 0)'. – alvits

ответ

1

Вы можете использовать вложенные if else. Сначала проверьте, равен ли он нулю доллары, иначе выполняйте свой процесс. Попробуйте что-то вроде этого:

if (c == 0 && b == 0 && a == 0){ 
    printf("Zero Dollars and ... "); 
} 
else{ 
    if (a > 0){ 
     printNum(a); 
     printf("Thousand "); 
    } 
    if (b > 0){ 
     printNum(b); 
     printf("Hundred "); 
    } 
    printNum2(c); 
    if (d >= 0){ 
     printNum(d); 
     printf("Dollars and ... "); 
    } 
} 

вместо

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 (c == 0 && b == 0 && a == 0){ 
    printf("Zero Dollars and ... "); 

как в вашем коде на if(d>=0) удовлетворяет, он никогда бы не ввести else if заявление (else if SKIPS если предыдущее утверждение верно).

0

ОЧЕНЬ быстрый взгляд, но:

if (d > 0){ 
    ..... 

Опять же, это был беглый взгляд, и я не проверял.

+0

Если я это сделаю, то он работает, если я нахожу 0.01, когда выход становится «Нулевые доллары и ... 1 цент» ОДНАКО, если я попытаюсь ввести только «1000», тогда выход станет «One Thousand 0 Cents», когда его предполагается скажем «тысяча долларов и ... 0 центов». Любые другие возможные предложения, сэр? Я кодировал в течение месяца, поэтому я сожалею, если вы попытаетесь сделать это, чтобы ответ был очевиден. –

Смежные вопросы