Почему мой статус elseif никогда не выполняется - PullRequest
0 голосов
/ 07 августа 2020

Есть идеи, почему статус else if никогда не будет выполнен? Величина разницы постоянно меняется при запуске программы.

        double difference = abs(reale_x[0] - reale_x[1]);
        if (0 <= difference < 45) {
            timer_counter += 1;
            if (timer_counter == 30) {
                cout << "CLICK" << '\n';
            }
        }
        else if (difference > 50) {
            timer_counter = 0;
        }

Ответы [ 3 ]

3 голосов
/ 07 августа 2020

Это не то, как работает сравнение в C ++.

Этот код

if (0 <= difference < 45) {

сначала сравнивает, меньше ли 0 или равно difference. Затем оно "заменяется" логическим значением true или false. Затем значение типа bool (то есть 1 или 0) сравнивается с 45. И оно всегда будет меньше 45. У вас всегда есть истинное утверждение.

Таким образом, вы бы написали это, если оператор

if (difference >= 0 && difference < 45){

Обратите внимание, что из-за вашего оператора else if он не будет выполняться, если разница> 44 и <51 </p>

2 голосов
/ 07 августа 2020

if (0 <= difference < 45) будет выполняться как if ((0 <= difference) < 45), что будет либо 0<45, либо 1<45 и всегда будет true. Вот почему часть else не выполняется.

0 голосов
/ 07 августа 2020

в математике мы видим и пишем 0 <= x < 45 или что-то в этом роде, чтобы определить диапазон переменной x. Но для того, чтобы сказать компьютеру то же самое, вам нужно сказать более ясно. Говоря, чтобы сообщить компилятору, что значение x больше или равно нулю, и в то же время это значение будет меньше 45, и вы можете сообщить компилятору с помощью этого оператора: difference >= && difference < 45. && является оператором «И» в большинстве языков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...