C程序陷入无限循环

时间:2016-01-20 17:10:10

标签: c while-loop infinite-loop

我遇到的问题是我的代码会陷入无限循环或者会出现堆栈溢出问题,并在计算过程中开始产生负数。

我知道这个问题来自我的while循环,并且认为问题可能在于我使用的公式是i = (r / 12)*(b - p + temp);行。

但我不确定如何解决这个问题。我的公式是试图计算12个月内每月固定利息贷款的利息,并将剩余的余额打印到屏幕上。这应该会持续到余额达到0

#include <stdio.h>

// main function
int main()
{
    // variable declarations
    float r = 0.22;   // interest rate
    float b = 5000.0; // amount borrowed
    float p;          // payment amount
    int   m = 1;
    float temp, ti = 0;
    float i;

    // Take in data from user
    printf("Please enter the amount you wish to pay monthly: \n");
    scanf("%f", &p);
    printf("\n");

    //display interest rate, initial balance, monthly payment
    printf("r = %.2f\nb = %.1f\np = %.1f \n\n", r, b, p);

    // Month by month table showing month interest due/paid and remaining balance
    i = (r / 12) * b;
    temp = i;
    printf("%d %.2f %.2f\n", m,i,b);
    m++;

    while (i > 0) {
        i = (r / 12) * (b - p + temp);
        b = (b - p + temp);
        ti += temp;
        temp = i;
        printf("%d %.2f %.2f\n",m, i, b);
        m++;
    }
    printf("\n");
    printf("total interest paid: %.2f\n", ti);

    return 0;
}

3 个答案:

答案 0 :(得分:5)

好吧,如果我正确地进行数学运算,看起来如果你为P输入一个小于91.67的值,你将陷入无限循环,因为每月的付款低于债务的利息;所以你可能想为它添加一个检查。

另外,如果您将变量命名为Interest,Base等,则不需要注释,代码也会更容易阅读。

此外,由于您要打印付款信息,直到余额为零,您应该循环,而b> 0

答案 1 :(得分:1)

该程序按预期工作。 唯一的问题是,如果您的每月付款较少 比利率 - 然后你需要偿还的金额 以指数方式增长,程序永远不会停止。

输入任意数字&gt; = 92,它似乎有效。

是22%p.a。利率是否正确?

答案 2 :(得分:1)

我不认为这会产生一个无限循环但如果你的还款高于成熟的利息会成为一个问题,你的起始参数就意味着低于91.67。

您可能有错误的结束条件,因此始终会打印出负线。