2016-10-03 3 views
-3

Я попытался запустить программу, но она работает неправильно. Проблема в функциях, но я точно не знаю где. Сначала я объявил функции, затем попробовал называть их в основном. Однако я не уверен, что это так. Я думаю, что проблема заключается в определении функции? Но я понятия не имею, что еще делать. Если бы кто-нибудь мог посмотреть на это и указать мне, что это было бы здорово.Функция в моем коде не работает

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

float computeMonthlyPayment(float p, float YearRate, float YearTerm); 
float computeMonthlyInterest(float p, float YearRate); 
void printLoanInfo(float p, float MonthlyPayment, float YearRate, float r, float YearTerm, float n); 
void printTable(float MonthlyPayment, float p, float YearRate,float YearTerm); 

int main() 
{ 

    float n, p, r, MonthlyPayment, YearRate, YearTerm; 

    printf("Enter the loan amount: "); 
    scanf("%f", &p); 

    if (p <= 0.0) 
     printf("\nERROR: Invalid rate; must be greater than 0\n"); 
     while (p <= 0.0) 
     { 
      printf("\nEnter the loan amount: "); 
      scanf("%f", &p); 
     } 

    printf("\nEnter annual interest rate: "); 
    scanf("%f", &YearRate); 

    if (YearRate <= 0.0 || YearRate > 30.0) 
     printf("\nERROR: Invalid rate; must be > 0.0 amd <= 30.0.\n"); 
     while (YearRate <= 0.0 || YearRate > 30.0) 
     { 
      printf("\nEnter annual interest rate: "); 
      scanf("%f", &YearRate); 
     } 

    printf("\nEnter the term of the loan (in years): "); 
    scanf("%f", &YearTerm); 

    if (YearTerm <= 0.0) 
     printf("\nERROR: Invalid rate; must be greater than 0\n"); 
     while (YearTerm <= 0.0) 
     { 
      printf("\nEnter the term of the loan (in years): "); 
      scanf("%f", &YearTerm); 
     } 


    float computeMonthlyInterest(float p, float YearRate); 
    float computeMonthlyPayment(float p, float YearRate, float YearTerm); 
    void printLoanInfo(float p, float MonthlyPayment, float YearRate, float r, float YearTerm, float n); 


    return 0; 
} 


float computeMonthlyPayment(float p, float YearRate, float YearTerm) 
{ 
    float r = YearRate/12; 
    float n = YearTerm*12; 
    float MonthlyPayment = 0; 

    MonthlyPayment = (r*p)/1-((1+r)/n); 

    return MonthlyPayment; 
} 


float computeMonthlyInterest(float p, float YearRate) 
{ 
    float r = 0; 
    r = ((YearRate)/12)/12; 

    return r; 

} 


void printLoanInfo(float p, float MonthlyPayment, float YearRate, float r, float YearTerm, float n) 
{ 

    printf("LOAN INFORMATION\n"); 
    printf("-----------------------\n"); 
    printf("Initial loan amount: %.2f\n", p); 
    printf("Annual interest rate: %.3f\n", YearRate); 
    printf("Monthly interest rate: %.3f\n", r); 
    printf("Term of loan (years): %f\n", YearTerm); 
    printf("Term of loan (months): %f\n", n); 
    printf("Monthly payment amount: %.2f\n", MonthlyPayment); 

} 
+4

Вы должны быть * lot * более конкретным, чем это. Высказывание «проблема в функциях» немного напоминает механика самолета, говорящего: «Проблема внутри самолета где-то». Когда вы говорите, что ваша программа не работает, что вы имеете в виду? Не удается ли его скомпилировать? Если это так, вам нужно сообщить подробности об ошибке. Если нет, вам необходимо предоставить информацию о предоставляемых вами входах и ожидаемых выходах вместе с фактическими выходами. Еще лучше, предоставьте MVCE (http://stackoverflow.com/help/mcve) –

+0

В будущем, пожалуйста, объясните, что такое предполагаемое поведение вашей программы и что она на самом деле делает; если он не скомпилируется, а затем сообщите нам, какие сообщения об ошибках, предоставленные вашим компилятором.Хотя проблема здесь стоит, когда вы начинаете ее искать, это не всегда так. И даже если кто-то сталкивается с проблемой, когда они пытаются запустить ваш код, нет никакого способа определить, является ли это той же проблемой, с которой вы столкнулись. Благодарю. –

ответ

0

Посмотрите на строки 48..50, в main().

int main() 
{ 

    // ... 

    float computeMonthlyInterest(float p, float YearRate); 
    float computeMonthlyPayment(float p, float YearRate, float YearTerm); 
    void printLoanInfo(float p, float MonthlyPayment, float YearRate, float r, float YearTerm, float n); 

    // ... 
} 

Это прототипы функций, а не то, как вы их на самом деле называете. Вы должны называть их так же, как вы звоните printf() или scanf(), передавая им соответствующие параметры. В настоящее время вы просто обновляете функции в main() и на самом деле не называете их. Попробуйте что-то вроде этого:

int main() 
{ 

    // ... 

    r = computeMonthlyInterest(p, YearRate); // r should be labeled better. 
    MonthlyPayment = computeMonthlyPayment(p, YearRate, YearTerm); 
    printLoanInfo(p, MonthlyPayment, YearRate, r, YearTerm, n); 

    // ... 
} 

Это еще не 100% фиксированной, хотя, потому что n не инициализируется. В то время как printLoanInfo() говорит, что это за (это также то, как я идентифицировал r), вы забыли установить его в main(). Так ..

int main() 
{ 

    // ... 

    r = computeMonthlyInterest(p, YearRate); 
    n = YearTerm * 12; // You did this in computeMonthlyPayment(), but not here. 
    MonthlyPayment = computeMonthlyPayment(p, YearRate, YearTerm); 
    printLoanInfo(p, MonthlyPayment, YearRate, r, YearTerm, n); 

    // ... 
} 

Таким образом, с этими изменениями в виду, ваш main(), вероятно выглядеть следующим образом:

int main() 
{ 

    float n, p, r, MonthlyPayment, YearRate, YearTerm; 

    printf("Enter the loan amount: "); 
    scanf("%f", &p); 

    if (p <= 0.0) 
     printf("\nERROR: Invalid rate; must be greater than 0\n"); 
     while (p <= 0.0) 
     { 
      printf("\nEnter the loan amount: "); 
      scanf("%f", &p); 
     } 

    printf("\nEnter annual interest rate: "); 
    scanf("%f", &YearRate); 

    if (YearRate <= 0.0 || YearRate > 30.0) 
     printf("\nERROR: Invalid rate; must be > 0.0 amd <= 30.0.\n"); 
     while (YearRate <= 0.0 || YearRate > 30.0) 
     { 
      printf("\nEnter annual interest rate: "); 
      scanf("%f", &YearRate); 
     } 

    printf("\nEnter the term of the loan (in years): "); 
    scanf("%f", &YearTerm); 

    if (YearTerm <= 0.0) 
     printf("\nERROR: Invalid rate; must be greater than 0\n"); 
     while (YearTerm <= 0.0) 
     { 
      printf("\nEnter the term of the loan (in years): "); 
      scanf("%f", &YearTerm); 
     } 


    // Remove these lines: 
    // float computeMonthlyInterest(float p, float YearRate); 
    // float computeMonthlyPayment(float p, float YearRate, float YearTerm); 
    // void printLoanInfo(float p, float MonthlyPayment, float YearRate, float r, float YearTerm, float n); 


    // Add these lines: 
    r = computeMonthlyInterest(p, YearRate); 
    n = YearTerm * 12; 
    MonthlyPayment = computeMonthlyPayment(p, YearRate, YearTerm); 
    printLoanInfo(p, MonthlyPayment, YearRate, r, YearTerm, n); 


    return 0; 
} 
0

Проблема не определения функций. Это факт, что в main() у вас есть копия и вставка этих строк.

float computeMonthlyInterest(float p, float YearRate); 
float computeMonthlyPayment(float p, float YearRate, float YearTerm); 
void printLoanInfo(float p, float MonthlyPayment, float YearRate, float r, float YearTerm, float n); 

Эти объявления функций, которые информируют компилятор о том, как вызывать функции, но на самом деле не называть их.

Если вы собираетесь на самом деле называть их, вам нужно будет сделать что-то вроде

variable1 = computeMonthlyInterest(p, YearRate); 
variable2 = computeMonthlyPayment(p, YearRate, YearTerm); 
printLoanInfo(p, MonthlyPayment, YearRate, r, YearTerm, n); 

По существу это снимает спецификацию типа из аргументов функции и передает фактические значения. variable1 и variable2 - это переменные, которые вам нужно будет определить (возможно, с более значимыми именами) перед тем, как эти операторы вернут возвращаемые значения. Предположительно вам понадобится написать еще один код в main(), чтобы использовать эти переменные.

0

Помните, что другие ответы касаются правильного вызова ваших функций. Код ниже должен работать. Мне пришлось переработать ваш computeMonthlyPayment, поскольку он неправильно вычислял.

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

    float computeMonthlyPayment(float p, float YearRate, float YearTerm); 
    float computeMonthlyInterest(float p, float YearRate); 
    void printLoanInfo(float p, float MonthlyPayment, float YearRate, float r, float YearTerm, float n); 
    void printTable(float MonthlyPayment, float p, float YearRate,float YearTerm);//why are you defining this if it doesn't exist? 

    int main() 
    { 

     float n=0, p, r=0, MonthlyPayment=0, YearRate, YearTerm; 

     printf("Enter the loan amount: "); 
     scanf("%f", &p); 

     if (p <= 0.0) 
      printf("\nERROR: Invalid rate; must be greater than 0\n"); 
      while (p <= 0.0) 
      { 
       printf("\nEnter the loan amount: "); 
       scanf("%f", &p); 
      } 

     printf("\nEnter annual interest rate: "); 
     scanf("%f", &YearRate); 

     if (YearRate <= 0.0 || YearRate > 30.0) 
      printf("\nERROR: Invalid rate; must be > 0.0 amd <= 30.0.\n"); 
      while (YearRate <= 0.0 || YearRate > 30.0) 
      { 
       printf("\nEnter annual interest rate: "); 
       scanf("%f", &YearRate); 
      } 

     printf("\nEnter the term of the loan (in years): "); 
     scanf("%f", &YearTerm); 

     if (YearTerm <= 0.0) 
      printf("\nERROR: Invalid rate; must be greater than 0\n"); 
      while (YearTerm <= 0.0) 
      { 
       printf("\nEnter the term of the loan (in years): "); 
       scanf("%f", &YearTerm); 
      } 

     printLoanInfo(p,MonthlyPayment,YearRate,r,YearTerm,n); 

     } 


    float computeMonthlyPayment(float p, float YearRate, float YearTerm) 
    { 
     float r = YearRate/(12*100); 
     float n = YearTerm*12; 

     return (p*r*pow(1 + r, n))/(pow(1 + r, n) - 1); // just return the calculation  
    } 


    float computeMonthlyInterest(float p, float YearRate) 
    { 
     float r = 0; 

     return (r = ((YearRate)/12)/12); 
    } 


    void printLoanInfo(float p, float MonthlyPayment, float YearRate, float r, float YearTerm, float n) 
    { 

     printf("LOAN INFORMATION\n"); 
     printf("-----------------------\n"); 
     printf("Initial loan amount: %.2f\n", p); 
     printf("Annual interest rate: %.3f\n", YearRate); 
     printf("Monthly interest rate: %.3f\n",  computeMonthlyInterest(p,YearRate)); //call function computeMonthlyInterest 
     printf("Term of loan (years): %.0f\n", YearTerm); 
     printf("Term of loan (months): %.0f\n", (YearTerm * 12));//simple calc for number of months 
     printf("Monthly payment amount: %.2f\n", computeMonthlyPayment(p,YearRate,YearTerm)); // call function computeMonthlyPayment 

    } 
Смежные вопросы