2016-01-20 37 views
1

我已经遇到的问题是,我的代码会被卡住或者在一个无限循环或将有一个堆栈溢出的问题,并开始计算过程中产生负数。C程序陷在一个无限循环

我知道这个问题是从我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; 
} 
+0

请务必提及您试图用公式实现的目标。 – Haris

+0

更新为包含该信息。 –

+0

如果你解释变量'i'是什么会很好。 –

回答

5

那么,如果我正确地做了数学,它看起来像是如果你为P输入一个小于91.67的值,你将陷入一个无限循环,因为每月付款少于对债务的指控;所以你可能想添加一个检查。

顺便说一句,如果你命名你的变量如利率,底座等你不需要的注释和代码会更容易阅读。

此外,由于要打印出来的付款信息,直到余额为零你应该循环而B> 0

1

该程序按预期工作。 唯一的问题是,如果你每月支付比利率少 - 那么你需要的金额偿还 呈指数级增长,并计划从未停止。

输入任意数量> = 92和它似乎工作。

是22%p.a.利率正确吗?

+3

“唯一的问题是,如果您的每月付款低于利率 - 那么您需要支付的金额会呈指数增长,并且程序永不停止。”喜欢现实生活:) – KevinDTimm

1

我没有看到这个产生无限循环,但如果你的还款较高,将成为一个问题比成熟的利息,这与您的起始参数,它意味着任何东西低于91.67。

你可能有一个错误的结束条件,从而始终有打印的负极线,虽然。