下注必须小于余额才能继续C

时间:2017-02-24 19:30:01

标签: c loops while-loop

所以我正在进行一场掷骰子游戏,游戏的一个方面是投注必须小于或等于平衡才能继续(所以你不要打赌比你更多)。现在我正在制作我正在制作的完整游戏,但是发布的代码太多了,所以我基本上写出了我想要做的事情。

我发布的代码假设它是一个损失,但由于某种原因它没有正确减去。在我的实际游戏中,它完全忽略了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;
}

如果有人对如何使这项工作有任何建议,我将非常感激。谢谢:))

2 个答案:

答案 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;
 }

我所做的改变首先取代了返回类型

int

double

第二个也是更重要的,我在这个函数中更改了第二个参数

int checking_wager(double balance, double wager)

指向double的指针

double checking_wager(double balance, double *wager)

原因是,从功能中返回新的赌注。

答案 1 :(得分:0)

问题出在checking_wager()函数的定义中。

因此,根据我的假设,您传递了两个balancewager参数,并希望在wager大于balance的情况下重新输入wager的值。

但是,您的代码并不像您预期​​的那样,因为您将wager定义为新的本地变量,它与[{}不共享相同的位置1}}来自main函数。

因此,最简单的解决方法是将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函数的wager指针放入checking_wager()函数中。

checking_wager(balance, &wager);

希望这会有所帮助。