获取while循环显示

时间:2016-02-07 03:32:07

标签: c++ loops while-loop

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main()
{
    int principal = 1000;
    int years = 1; //counter
    double balance = 0.0;
    double rate = .02; 

    do
    {
        cout << "Year " << years << ":" << endl;

        while (rate < .05)
        {
            balance = principal * pow(1 + rate, years); //display rate with no decimal place
            cout << fixed << setprecision(0);
            cout << "   Rate" << rate * 100 << "%: $";
            cout << setprecision(2) << balance << endl; //display balance with two decimal places
            rate += .01;
        }
        years += 1;
    } while (years < 6);

    system("pause");
    return 0;
}

我有这个计划,计算年利率2%,3%和4%,并显示超过5年的金额。我的while循环将在第一年运行并显示它,但不是第2年到第5年。我已经多次编辑程序,但我似乎无法显示结果。任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

do
{
    cout << "Year " << years << ":" << endl;
    double rate = .02;
    ^^^^^^^^^^^^^^^^^^
    while (rate < .05)
    // rest of the code...

每次外循环运行时,您都忘记将rater重置回.02。因此,外部循环确实按原样执行,但由于上面的错误,内部循环没有任何作用,因此没有输出。

此外,为了在循环或条件中做出决策,比较doublefloat值并不是一个好主意。由于浮点运算由于其内部表示而在计算机中不完全准确,因此您的条件可能会与您预期的相反。更好地重做代码,只比较整数或布尔类型,并在其他地方执行浮点计算。

这是关于我是如何做到的(包括我不知道的@vsoftco修复!希望你不要因为完整性和正确性而把它包括在这里)。 for循环使这个更整洁:

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main(int argc, char **argv)
{
    const int principal = 1000;
    double balance = 0.0;

    for (int years = 1; years < 6; ++years)
    {
        cout << "Year " << years << ":" << endl;
        for (int ratePercent = 2; ratePercent < 5; ++ratePercent)
        {
            double rate = ratePercent / 100.0;
            balance = principal * pow(1 + rate, years);
            cout << fixed << setprecision(0);
            cout << "   Rate" << ratePercent << "%: $";
            cout << setprecision(2) << balance << endl;
        }
    }

    cin.get(); // <--- per vsoftco comment!
    return 0;
}