2016-01-20 2 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

Ну, если я правильно делаю математику, похоже, если вы введете значение менее 91,67 для P, вы застрянете в бесконечном цикле, потому что ежемесячные платежи меньше, чем проценты, обвиняющие в долге ; поэтому вы можете добавить чек для этого.

В качестве стороннего, если вы назвали свои переменные как интересы, базы и т. Д., Вам не понадобятся комментарии, а код будет легче читать.

Кроме того, поскольку вы распечатайте платежные реквизиты, пока баланс не станет равным нулю вы должны цикла, а б> 0.

1

Программа работает должным образом. Единственная проблема заключается в том, что если ваш ежемесячный платеж меньше , чем процентная ставка - тогда сумма, которую вы должны окупить , растет экспоненциально, и программа никогда не останавливается.

Введите любое число> = 92 и, похоже, сработает.

is 22% p.a. процентная ставка правильно?

+3

«Единственная проблема заключается в том, что если ваш ежемесячный платеж меньше процентной ставки, то сумма, которую вы должны окупить, растет экспоненциально, и программа никогда не прекращается». Как настоящая жизнь :) – KevinDTimm

1

Я не вижу в этом генерируя бесконечный цикл, но это станет проблемой, если ваш возврат выше чем зрелый интерес, который с вашим начальным параметром означает что-либо ниже 91.67.

Возможно, у вас неправильное конечное состояние, поэтому всегда есть отрицательная строка.