2017-02-24 49 views
0

因此,我正在製作一個擲骰子游戲,遊戲的一個方面就是下注必須小於或等於餘額才能繼續(所以您不會超過下注你有)。現在我已經完成了我正在開發的完整遊戲,但是發佈的代碼太多,所以我基本上寫出了我正在嘗試做的事情。下注必須小於餘額才能繼續C

我發佈的代碼假設它是一個損失,但由於某種原因它不會正確減去。在我的實際遊戲中,它完全忽略了while函數。如果我的餘額是20,我打賭22它給了我-2。我無法弄清楚如何正確地做這項工作..

#include<stdio.h> 


int main(void) 
{ 
    double balance = 0.0, wager = 0.0; 

    balance = get_balance(); 
    wager = get_wager(); 
    checking_wager(balance, wager); 
    loss(balance, wager); 

    return 0; 
} 

double get_balance(void) 
{ 
    double balance = 0.0; 
    balance = printf("Enter your balance: "); 
    scanf("%lf", &balance); 
    return balance; 
} 

double get_wager(void) 
{ 
    double wager = 0.0; 
    wager = printf("Enter your wager: \n"); 
    scanf("%lf", &wager); 
    return wager; 
} 

double checking_wager(double balance, double wager) 
{ 
    while (wager > balance) 
    { 
     printf("The wager is invalid\n"); 
     wager = get_wager(); 
    } 
    return 0; 
} 

double loss(double balance, double wager) 
{ 
    balance -= wager; 
    printf("Balance: %.2f", balance); 
    return balance; 
} 

如果任何人有我怎樣才能使這項工作有什麼建議,我將不勝感激。謝謝:)

+1

第一個問題:'get_balance'返回一個'int'到'balance',這是'double'。與'get_wager'相同。我想有關於此的編譯器警告。 – yano

+0

'失(雙衡,雙下注)'!你還需要糾正返回類型的功能,需要'雙'。 –

+0

'double checking_wager(double balance,double wager)'應該是'double checking_wager(double balance,double * wager)'在函數內部有'* wager = get_wager()'....或者有'return wager' ,而不是'返回0'。 –

回答

1

我重新格式化你的代碼,現在它應該工作。

int main(void) 
{ 
    double balance = 0.0, wager = 0.0; 

    balance = get_balance(); 
    wager = get_wager(); 
    checking_wager(balance, &wager); 
    loss(balance, wager); 

    return 0; 
} 

double get_balance(void) 
{ 
    double balance = 0.0; 
    balance = printf("Enter your balance: "); 
    scanf("%lf", &balance); 
    return balance; 
} 

double get_wager(void) 
{ 
    double wager = 0.0; 
    wager = printf("Enter your wager: \n"); 
    scanf("%lf", &wager); 
    return wager; 
} 

double checking_wager(double balance, double *wager) 
{ 
    while (*wager > balance) 
    { 
     printf("The wager is invalid\n"); 
     *wager = get_wager(); 
    } 
    return 0; 
} 

double loss(double balance, double wager) 
{ 
    balance -= wager; 
    printf("Balance: %.2f", balance); 
    return balance; 
} 

我已經做了改變,先被替換的returntypes形式

int 

double 

第二套及以上importent,我已經改變了第二放慢參數int此函數

int checking_wager(double balance, double wager) 

to a po inter to double

double checking_wager(double balance, double *wager) 

之所以這樣,是從函數返回新的下注。

+0

我認爲這段代碼應該可以工作,但是我得到42行上的錯誤,說明存在「重新定義不同的基本類型」錯誤 –

+0

那裏的代碼行是什麼?你是否也更新過頭文件? – Alex

+0

31(對不起我說32但我31):'雙checking_wager(雙餘額,雙*下注)' –

0

問題發生在您的checking_wager()函數的定義中。

所以從我的假設,傳遞的兩個參數是balancewager,並希望在案件重新輸入的wager值,它比balance更大。

但是,你的代碼沒有像你預期的,因爲你所定義的wager新的局部變量,不共享相同的位置,從wager主要功能。

因此,最簡單的修復方法是將checking_wager()'s wager更改爲指針,以便它可以引用並更改main()'s wager的值。

int checking_wager(double balance, double *wager) 
{ 
    while (*wager > balance) 
    { 
     printf("The wager is invalid\n"); 
     *wager = get_wager(); 
    } 
    return 0; 
} 

因此,要從main函數調用它,基本上可以將main函數的下注指針賦給checking_wager()函數。

checking_wager(balance, &wager); 

希望這會有所幫助。

+0

它也不會返回平衡,它也需要是一個指針,以便更改外部值。 – stark

相關問題