为什么这个方程式没有循环我的期望?

时间:2014-08-08 17:44:40

标签: c arguments pass-by-value

我试图根据百分比来计算价格下降。如果我手工写出来,它就像下面的等式,简单的x = x - (10%的x),或new_price = old_price - (old_price的10%)。因此,100将成为90,90将成为81,依此类推。我认为。我不确定我是不是在脑力训练或是什么,但是当我跑步时,它只是永远地循环而且#34; 90"作为输出。

#include <stdio.h>
#include <math.h>


int pricedecrease(int x)
{
    x = x - (x / 10.0);
    return  x;
}

int main(void)
{
    int price = 100;

    while(price > 3)
    {
        printf("%d\n", pricedecrease(price));
    }
}

3 个答案:

答案 0 :(得分:2)

函数参数在C中以值传递,因此当函数返回给调用者时,函数体不会影响参数的值。

在您的情况下,您将调整后的值作为返回值返回,因此您可以将返回值分配给变量。

while (price > 3)
{
    price = pricedecrease(price);
    printf("%d\n", price);
}

答案 1 :(得分:2)

您需要在循环中更新价格变量。调用pricedecrease函数不会修改price变量。

#include <stdio.h>
#include <math.h>


int pricedecrease(int x)
{
    x = x - (x / 10.0);
    return  x;
}

int main(void)
{
    int price = 100;

    while(price > 3)
    {
        printf("%d\n", price);
        price = pricedecrease(price); // <- need to update price variable
    }
}

答案 2 :(得分:1)

这是一个无限循环,因为price未被修改。

函数参数作为副本传递到堆栈中。为了修改原文,您需要使用指针并传递price的地址。

int pricedecrease(int *x)
{
    *x -= (*x / 10.0);

    return *x;
}

int main(void)
{
    int price = 100;

    while(price > 3)
    {
        printf("%d\n", pricedecrease(&price));
    }
}