Переменные изменяются сами по себе в C ++ - PullRequest
0 голосов
/ 06 октября 2019

У меня есть цикл, проходящий через массив, пытающийся найти, какой индекс является строкой. Это должно решить, для чего это значение должно быть. Я не могу понять, почему, но как только оператор 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;

Ответы [ 2 ]

2 голосов
/ 06 октября 2019

Как уже отмечалось, в ваших операторах if вы используете оператор присваивания (=), но хотите оператор сравнения равенства (==). Для вашей переменной i первый оператор if устанавливает i равным 0, а if(0) совпадает с if(false). Таким образом, ваша программа переходит к первому else-if, который устанавливает i равным 1, а if(1) оценивается как true. Затем ваш код завершает блок в else if (i = 1) {...} и затем завершается.

2 голосов
/ 06 октября 2019

Это потому, что operator = является оператором присваивания в C ++ (и на самом деле для большинства языков). Это изменяет значение переменной на значение на другой стороне. Так, например:

x = 0

изменит значение x на 0. Не имеет значения, находится ли оно в операторе if. Он всегда будет менять значение на 0 (или любое другое правое значение).

То, что вы ищете, это operator == , который является оператором сравнения (он же реляционный)в C ++ / Это задает вопрос "Эти две вещи равны?"Так, например:

x == 0

спрашивает, равен ли x равен 0.

...