场景输出在第二次循环时给出了错误的答案

时间:2017-12-05 16:19:43

标签: c++ loops while-loop output

除了这个小问题,我已经完成了这个程序。

问题是当我第一次循环使用20.0 36.0 72.0 2.0 10.0 18.0 10.0中的以下内容时,我的输出结果为232.59 sec,这是正确的。

我第二次循环,我输入25.0 72.0 200.0 1.5 8.0 30.0 20.0我的输出结果是800.41,这应该是1141.63

现在,如果我反转输入并接受我为第一个循环输入的第二个循环,第一个循环输入第二个循环。我的第一个循环输出1141.63,但第二个循环,我的答案是1141.63。我很困惑这是怎么回事。我早期的一个解决方案是在每次循环后使用另一个函数将所有变量重置为0,但这似乎不起作用,现在我就在这里。

编辑:问题已经解决了。必须重置时间并在每个循环结束时将volFilled设置为0.

void Well::timeReq()
{
    bool exit = false;

    while (!exit)
    {

        std::cout << "Enter 7 digits to evaluate or type 0 now to exit." << std::endl;

        std::cin >> UP;

        if (UP == 0)
        {
            exit = true;
            break;
        }

        std::cin >> D >> L >> B >> P >> DOWN >> V;

        double WL = L;

        double radius = (D / 2);

        while (volFilled < V)
        {

            time += UP;


            time += sqrt(2 * (L) / (acceleration * 12.0));


            time += (L) / (P);


            L += (B * cuIns) / (pi*pow(radius, 2));


            time += DOWN;
            volFilled += B;
        }

        std::cout << std::endl;
        std::cout << "Scenario " << scenario << ":" << std::endl;

        std::cout << std::left << std::setw(25) << "\tUp Hill"            << std::left << std::setw(30) << std::fixed << std::setprecision(2)
                  << UP << " sec" << std::endl;

        std::cout << std::left << std::setw(25) << "\tWell Diamter"       << std::left << std::setw(30) << std::fixed << std::setprecision(2)
                  << D << " in" << std::endl;

        std::cout << std::left << std::setw(25) << "\tWater Level"        << std::left << std::setw(30) << std::fixed << std::setprecision(2)
                  << WL << " in" << std::endl;

        std::cout << std::left << std::setw(25) << "\tBucket Volume"      << std::left << std::setw(30) << std::fixed << std::setprecision(2)
                  << B << " cu ft" << std::endl;

        std::cout << std::left << std::setw(25) << "\tBucket Ascent Rate" << std::left << std::setw(30) << std::fixed << std::setprecision(2)
                  << P << " in/sec" << std::endl;

        std::cout << std::left << std::setw(25) << "\tDownhill"           << std::left << std::setw(30) << std::fixed << std::setprecision(2)
                  << DOWN << " sec" << std::endl;

        std::cout << std::left << std::setw(25) << "\tRequired Volume"    << std::left << std::setw(30) << std::fixed << std::setprecision(2)
                  << V << " cu ft" << std::endl;

        std::cout << std::left << std::setw(25) << "\tTIME REQUIRED"      << std::left << std::setw(30) << std::fixed << std::setprecision(2)
                  << time << " sec" << std::endl;

        scenario++;
    }
}

1 个答案:

答案 0 :(得分:1)

虽然这可能无法完全解决您的问题,但您至少需要在场景之间将volFilled值重新初始化为0.0。否则,您只是继续上一个场景的volFilled,这就解释了为什么您在切换场景时所做的第二次测试产生了相同的输出。在volFilled达到20.0的第一个场景之后,它将不会在第二个场景中执行considion while (volFilled < V)内的逻辑,因为此时volFilled = 20而V = 10.