2017-07-02 48 views
-2

我的代碼怎麼不打印intcoins? 運行調試系統時看不到任何錯誤。我的代碼不打印稱爲硬幣的變量

#include <cs50.h> 
#include <stdio.h> 

int main(void) 
{ // getting the user validation 
    printf("please enter a amount of change \n"); 

    int change = get_int(); 
    int coins = 0; 
    if (change > 0 && change <= 0 && change != 0) 
     printf("Change: %i\n", change); 

    if (change > 0) 
    { 
     printf("Change: %i\n", change); 
    } 

    if (change < 0) 
    { 
     printf("please enter a positve number \n"); 
    } 

    if (change == 0) 
    { 
     printf("Coins: 0 \n"); 
    } 
    //were it counts the amount of coins 


    float changef = (int)change; 
    float qaurter = 0.25; 
    float dime = 0.10; 
    float nickel = 0.05; 
    float penny = 0.01; 



    while (changef/qaurter) 
    { 
    coins++; 
    return changef - qaurter; 
    } 

    while (changef/dime) 
    { 
    coins++; 
    return changef - dime; 
    } 

    while (changef/nickel) 
    { 
    coins++; 
    return changef - nickel; 
    } 

    while (changef/penny) 
    { 
    coins++; 
    return changef - penny; 
    } 
    printf("Coins: %i\n",coins); 

} 
+0

在'if(change> 0 && change <= 0 && change!= 0)前兩個條件不能*都是真實的。 –

+0

請學會格式化您的代碼,並將其格式化。閱讀未格式化的代碼很煩人。使用模塊運算符'%'。除此之外,你是什麼意思「不打印?」在處理貨幣時,你也不應該使用'float'和'double',這會導致長期的錯誤結果 – Pablo

+1

請閱讀[浮點運算是否被破壞?](https://stackoverflow.com/questions/588004/is-floating-point-math-broken)這裏有很多許多「改變」的問題。使用浮點類型很少令人滿意。 –

回答

3

你的循環都寫在他們return聲明:

while (changef/qaurter) 
{ 
    coins++; 
    return changef - qaurter; 
} 

main()回到相當於退出程序。您需要修改代碼以避免在循環中使用return。例如(包括拼寫修正):

while (changef/quarter) 
{ 
    coins++; 
    changef -= quarter; 
} 

儘管坦率地說,你能避免環路乾脆:

int extra = changef/quarter; 
coins += extra; 
changef -= extra * quarter; 

然而,有更多的術前要做的事這是可行的,因爲你只作出整數變化的美元,但你有quarter和朋友定義爲float變量與小數值。你要麼只需要分工(int quarter = 25;),要麼允許用戶首先輸入浮點值,或者...

+1

正如我們所知道的,由於浮點精度問題,讀取一個浮點值並對這個簡單的應用程序使用浮點運算來調用更多的問題。但它是教導一些基本概念和陷阱的非常工具。 – chqrlie