c++模糊逻辑循环在第一次输入后递增

C++ Fuzzy Logic loop increments after first input

本文关键字:输入 第一次 模糊逻辑 循环 c++      更新时间:2023-10-16

我写了第一个模糊逻辑程序,第一个输入通过输出正确的电压值完美地完成了它的工作。电压这个词严格来说是个占位符。这和我的计算完全吻合。之后的任何值都会增加最终输出,并且永远不会再工作,直到我重置程序,在此之后,它会做同样的事情。

我将尽量简化我的代码。

int main()
{
int InputDistance;
double BetweenDistance1;
double BetweenDistance2;
double DoM1;
double DoM2;
double OutputComponent1;
double OutputComponent2;
double CrispOutput;
bool NN = false;
bool N = false;
bool Z = false;
const double NNVolt (0);
const double NVolt (2.25);
const double ZVolt (4.5);
for(;;)
{
        cout <<  "What is the distance?" << endl << endl;
        cin >> InputDistance;
        cout << endl;
        if(InputDistance > 0 && InputDistance <= 5)
        {
            BetweenDistance1 = InputDistance - 0;
            BetweenDistance2 = 5 - InputDistance;
            NN = true;
            N = true;
        }
        if(InputDistance > 5 && InputDistance <= 10)
        {
            BetweenDistance1 = InputDistance - 5;
            BetweenDistance2 = 10 - InputDistance;
            NN = true;
            N = true;
        }
        if(InputDistance > 10 && InputDistance <= 15)
        {
            BetweenDistance1 = InputDistance - 10;
            BetweenDistance2 = 15 - InputDistance;
            N = true;
            Z = true;
        }
        if(InputDistance > 15 && InputDistance <= 20)
        {
            BetweenDistance1 = InputDistance - 15;
            BetweenDistance2 = 20 - InputDistance;
            N = true;
            Z = true;
        }
        DoM1 = BetweenDistance1 / 5;
        DoM2 = BetweenDistance2 / 5;
        if(NN == true && N == true)
        {
            OutputComponent1 = NNVolt * DoM1;
            OutputComponent2 = NVolt * DoM2;
        }
        if(N == true && Z == true)
        {
            OutputComponent1 = NVolt * DoM1;
            OutputComponent2 = ZVolt * DoM2;
        }
        CrispOutput = OutputComponent1 + OutputComponent2;
        cout << "Voltage = " << CrispOutput << endl << endl;
    }
    return (0);
}

是什么导致每次我输入一个新的距离值时值增加?我看不见。

你永远不能重置你的bool

bool NN = false;
bool N = false;
bool Z = false;

应该在for循环的开始处,以便每次循环时重置它们。

根据经验,除非你需要在循环作用域之外访问它,否则你将在循环中使用的任何变量都应该在循环中声明。

你应该初始化你所有的变量,因为即使你的编译器将它们初始化为null, "", preppended "", 0, 0.0, 0.0f,它也可以被认为是在不遵循这种标准的不同编译器下编译的,或者用初始化使用不同东西的标志编译。

int main()
{
    int InputDistance = 0;
    double BetweenDistance1 = 0.0;
    double BetweenDistance2 = 0.0;
    double DoM1 = 0.0;
    double DoM2 = 0.0;
    double OutputComponent1 = 0.0;
    double OutputComponent2 = 0.0;
    double CrispOutput = 0.0;
    bool NN = false;
    bool N = false;
    bool Z = false;
    const double NNVolt (0);
    const double NVolt (2.25);
    const double ZVolt (4.5);

你应该在循环开始时重新初始化,以确保你不会使用以前迭代的数据。

    for(;;)
    {
            //----------- init ------------
            InputDistance = 0;
            BetweenDistance1 = 0.0;
            BetweenDistance2 = 0.0;
            DoM1 = 0.0;
            DoM2 = 0.0;
            OutputComponent1 = 0.0;
            OutputComponent2 = 0.0;
            CrispOutput = 0.0;
            NN = false;
            N = false;
            Z = false;
            //-----------------------------
            cout <<  "What is the distance?" << endl << endl;
            cin >> InputDistance;
            cout << endl;
            ..            
        }
        return (0);
}