2017-02-24 20 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

相关问题