我有一个遍历数组的循环,试图找到哪个索引是字符串。它应该解决该值应该是多少。
我不知道为什么,但是if语句开始i
变为1时,这给我的代码带来了错误。
我不太懂C ++。
for(int i = 0; i < 4; i++) {
if(auto value = std::get_if<std::string>(&varArr[i])) {
solvedIndex = i;
auto value0 = std::get_if<float>(&varArr[0]);
auto value1 = std::get_if<float>(&varArr[1]);
auto value2 = std::get_if<float>(&varArr[2]);
auto value3 = std::get_if<float>(&varArr[3]);
//i changes to 1 when this if starts??
if(i = 0) {
solvedVar = (*value3 / *value1) * *value2;
} else if (i = 1) {
solvedVar = *value3 / (*value0 / *value2);
} else if (i = 2) {
solvedVar = *value0 / (*value3 / *value1);
} else {
solvedVar = *value1 * (*value0 / *value2);
}
break;
}
}
请注意,这些变量已在上面声明。另外,varArr
填充有值:
std::variant<std::string, float> varArr[4];
int solvedIndex;
float solvedVar;
答案 0 :(得分:2)
这是因为operator=是C ++(实际上是大多数语言)的赋值运算符。这会将变量的值更改为另一侧的值。因此,例如:
x = 0
会将x的值更改为0。如果在if语句中,则无关紧要。它将始终将值更改为0(或任何右侧值)。
您要寻找的是operator==,它是C ++ /中的比较(也称为关系)运算符,它会问“这两个条件是否相等?”的问题。因此,例如:
x == 0
要求x等于0。
答案 1 :(得分:2)
如前所述,在您的if
语句中,您正在使用赋值运算符(=
),但需要相等比较运算符(==
)。对于变量i
,第一个if
语句集i
等于0
,而if(0)
与if(false)
相同。因此,程序进入第一个else –如果将i
设置为1
并且if(1)
的值为true。然后,您的代码将完成else if (i = 1) {...}
中的代码块,然后结束。