无限循环

时间:2018-10-01 18:11:32

标签: c++ visual-c++

我是C ++的新手。

我的代码中的Yi函数有问题。

Yi函数中的do while循环永不中断。

我不知道问题出在哪里。我猜,这是布尔值,但不确定。

111111111111111111111111111111111111111111111111111111111111222222222222222222222233333333333333333333333333333333444444444444444444444444444444444444444444

没有更多详细信息。

 #include "pch.h"
    #include <iostream>
    #include <iomanip>
    #include <limits>
    #include <cmath>

    using namespace std;

    double Yi(double&, double&, double&, int&, int&);
  double Yi(double &f, double &a, double &b, int &i, int &n) {

    float  amin, amax, bmin, bmax, da, db;
    bool z = true;

    do {    cout << "input amin, amax, da" << endl;
            cout << "input bmin, bmax, db" << endl;
            cout << "Input n" << endl;

            while (!(cin >> amin) || !(cin >> amax) || !(cin >> da) || !(cin >> bmin) || !(cin >> bmax) || !(cin >> db) || !(cin >> n)) {

                cout << "You have entered wrong input. Input values again: " << endl;
                cin.clear();
                cin.ignore(numeric_limits<streamsize>::max(), '\n');

            }
            i = 1;
            if ((amax > amin && da > 0) && (bmax > bmin && db > 0) && (n>=i))
            {   for (a = amin; a < amax; a += da);
                for (b = bmin; b < bmax; b += db);
                for (i; i < n; i++);
            }

        float f1, f2;

        if (a == 0)
        {
            cout << "***********************************************" << endl;
            z;
        }
            if (a > 0)
        {   
            f1 = (a * i + 2 * b) * (a * i + 2 * b) + pow(-1, i)*i;
            f2 = sqrt(i*i + i);

            f = f1 / f2;
            z = false;

        }

        if (a < 0)
        {    
            f1 = (a * i + 2 * b) * (a * i + 2 * b) + i;
            f2 = sqrt(i*i - i + 1);

            f = f1 / f2;
            z = false;

        }

        } while (z);

    return f;

}

我应该为工作代码更改什么? 先感谢您。 :)

1 个答案:

答案 0 :(得分:0)

我什至不知道您的Yi函数的作用,但是,z中的布尔值仅在a变为零的情况下才更改。因此,我们可以假设a永远不会小于或等于0,因此如果if ((amax > amin && da > 0) && (bmax > bmin && db > 0) && (n>=i))或如果这样做,您的代码将永远不会进入此代码提供的块,而代码for (a = amin; a < amax; a += da);不会这样做。 t执行,以使a不小于amax或增加a直到达到0。如果if ((amax > amin && da > 0) && (bmax > bmin && db > 0) && (n>=i))由以下内容开头 永远不会执行,a已经设置为0。

通常,您不应该复制并粘贴代码并要求人们对其进行修复,但是,由于您既不熟悉该论坛,也不熟悉c ++编程,因此无论如何我都尽力帮助您。另请注意,最好张贴示例输入和输出,以使发现问题更容易。干杯。