c++模糊逻辑循环在第一次输入后递增
C++ Fuzzy Logic loop increments after first input
我写了第一个模糊逻辑程序,第一个输入通过输出正确的电压值完美地完成了它的工作。电压这个词严格来说是个占位符。这和我的计算完全吻合。之后的任何值都会增加最终输出,并且永远不会再工作,直到我重置程序,在此之后,它会做同样的事情。
我将尽量简化我的代码。
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);
}
相关文章:
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何确保用户在一行上提示输入一次时输入名字和姓氏?
- 静态堆栈函数不会 1) 输入第一个元素 2)添加新元素时识别旧元素
- 我必须构建我的项目 2 次,第一次失败,因为它无法打开库
- 是什么导致我的循环在第一次迭代中运行得更慢
- QLibrary 函数在第一次调用时工作缓慢
- 如何获取字符串输入n次?
- 第一次尝试使用new动态创建结构数组,程序挂起没有错误
- 为什么第一次迭代后的指针指向随机值?
- 如何防止GUI挂起,同时允许第二次操作与Qt中的第一次操作一起执行
- 我的 SDL2 应用程序仅在第一次键盘输入后出现严重延迟
- 程序不接受任何输入.第一次输入后,它会自动关闭
- 第一次执行后我的while循环周围出现错误,不再要求输入
- 我的使用地图的程序在第一次输入后崩溃
- 第一次通过循环输入空字符串?(c++)
- C++程序要求我输入两次,即使变量第一次被分配
- 输入验证循环在第一次输入失败后无法正常工作
- 第一次循环后不使用输入
- c++模糊逻辑循环在第一次输入后递增
- 我的 for 循环第一次正确输入,但第二次不正确,并显示第二个输入的输出。我不明白为什么会这样。