2015-03-03 44 views
-2

好吧,在为此工作了几个小时之后,我认为我想出了一些对于真正的“真正的”程序员来说不那么令人畏缩的东西。
允许我提交我的卑微和可能很糟糕的代码。
它完全有效,但现在我的问题是,我试图让它回到最初的问题,如果响应是负数。我明白了,“嘿!不要输入一个负数!”,然后它会进入下一个提示。这是我目前输出的负输入:C++中的复合兴趣函数

**欢迎使用消费贷款计算器** 您想借多少钱? $ -100 请输入正确的贷款金额。 你的年度百分比率是多少? %

...而对于正输入:

**欢迎消费者贷款计算器** 多少你想借钱? $ 100 你想借多少钱? $ 100 你想借多少钱? $

我想让它回到“你想借多少钱?”如果用户输入为负值,并且只有在输入为正值时才转到下一个问题。我现在做错了什么?

#include <iostream> 
#include <cmath> 
#include <iomanip> 
#include <cstdlib> 
using namespace std; 

void get_input (double &principal, double &APR, double mon_pay); 

int main() 
{ 
    double loan; // principal 
    double APR; // APR 
    double mon_pay; //monthly payment 

    cout << "** Welcome to the Consumer Loan Calculator **"<<endl; 
    do { 
     cout << "How much would you like to borrow? $"; 
     cin >>loan; 
     if (loan < 0) 
     cout <<"Please enter a positive loan amount."; 
     } 
    while (loan > 0); 
    cout << "What is your annual percentage rate? %"; 
    cin >>APR; 
    cout << "What is your monthly payment? $"; 
    cin >> mon_pay; 

    APR = APR/100; 
    get_input (loan, APR, mon_pay); 

} 

void get_input (double &principal, double &APR, double mon_pay) 
{ 
    double total, add=0; // Total payment 
    int tpay=1; //Total months of payment 

    while (principal > 0) 
    { 
     add = principal * (APR/100); 
     principal = ((principal+add) - mon_pay); 
     tpay++; 
    } 

    total = mon_pay + principal; 
    cout << "Your debt will be paid off after "<< tpay << " months, with a final payment of just $" <<setprecision(3)<<total<<endl; 
    cout <<"Don't get overwhelmed with debt!"<<std::endl; 

} 
+0

考虑添加作业标签。 – erip 2015-03-03 03:10:52

+0

我刚刚检查,无法找到家庭作业的标签。感谢您的建议。你碰巧对我的问题有什么建议吗? – 2015-03-03 03:12:55

+0

请参阅我的回答以获取建议。 – erip 2015-03-03 03:48:12

回答

2

这一行肯定是错误的:

while (int tp=1, double p <= double m, double sub--m) 
+0

这应该是一个评论,而不是答案。 – erip 2015-03-03 03:16:20

+0

是的。完全意识到这一点。也许我应该在这里问一个不同的问题: 创建此循环的最佳方法是什么?而?做什么?对于? 我全力以赴了解自己的事情,并且我理解数学所涉及的内容,但我需要指出正确的方向以及如何去做。 – 2015-03-03 03:34:04

1

从根本上说,也有很多与此代码的问题。我建议开始消除所有全局变量。他们会让你的代码更易于调试,并且它被认为是不好的做法一般使用它们。此外,我会为你的变量选择更多的描述性标识符 - 它会使逻辑更加深奥。例如,对于变量名称,m是一个糟糕的选择。为什么不选择monthly_pay或更清晰的东西?

此外,while循环的参数为布尔型。你写的东西没有意义,我真的不确定如果编译器现在没有尖叫,编译器会做什么。我的猜测是,从int tp=1始终评估为真,将会处于无限循环。

最后,学习模块化代码是值得的。根据你的代码,我敢说你是代码领域的初学者。这是非常好的做法(并且很好地遵循逻辑)来模块化您的代码。如果你亲自做这个工作,你会遵循什么逻辑步骤?

  1. 迎接用户
  2. 获取输入
  3. 做一些计算
  4. 输出给用户
  5. 告别

如果有更多的细节,预期成果等,我d建议将它们添加到您的问题或被标记为过于宽泛的风险。

祝你的作业好运。 erip

EDIT

完全忘了功能。

与数学一样,函数需要参数。

f(x)= x^2 + 2x - 1.这个函数的参数显然是x。

在编程中,一些函数也需要参数。

比方说,你想模拟this方程...

你可能会考虑做这样的事情:

#include <math.h> 

double compound_interest(double r, int n, double t, double P) 
{ 
    return P*pow((1+ r/n), n*t); 
} 

所以,如果你想在你的主

//insert header stuff, function declarations, etc. 

int main() 
{ 
    double rate = 0.1, // 10% 
      time = 10.0, // 10 months 
      principle = 125.00, // $125.00 
      accumulated; // This is what we want to know 
    int payment_period = 12; // 12 months 

    accumulated = compound_interest(rate, payment_period, time, principle); 

    cout << "Total accumulated cost is " << accumulated << endl; 

    return 0; 
} 
调用此
+0

小记,我不认为这会起作用,因为我不记得'pow'采用的参数类型,但它可以被操纵。 – erip 2015-03-03 03:51:07

+0

嗨那里 - @erip我很欣赏你花时间试着回答我的问题。是的,我是一名初学者。我35岁,拥有职业生涯和2个大学学位。我正在努力学习这一点,以促进我的职业生涯。我意识到很多人来她为他们做功课,但不是每个人。我们中的一些人正在合理地学习这一点(在我的情况下,需要额外的帮助来理解!)。你们没有一个从子宫编码中出来。每个人都必须学习。向下投票的帖子寻求帮助只是粗鲁。帮助或不帮助。尽管如此,它并不会杀死任何人以保持最低限度。 – 2015-03-03 22:57:34

+0

我既不*故意*粗鲁,我也不投票。我没有被吓倒。我意识到你正在努力学习,这就是为什么我全面回答。如果你被冒犯了,我很抱歉。完全不是我的目标。祝你好运。 – erip 2015-03-04 06:25:19