сравнивая две переменные в с ++ - PullRequest
0 голосов
/ 28 апреля 2020

изучаю c ++, и я уверен, что пропускаю что-то очевидное, но я не уверен, почему я не получаю сообщение, что i == j , хотя после 3-й итерации числа совпадают ?

Это вывод:

8 не равно 12

9 не равно 11

ценим любые намеки!

#include<iostream>

int main(){

   int i=8;
   int j=12; 

   for (i,j; i!=j; ++i, --j)
   {    
   if (i == j) 
        {     
         std::cout << "i = j" << "\n";   // this part doesnt work
         break;
        }
   else 

        std::cout << i <<" is not equal to " << j <<"\n"; 

   }
}

Ответы [ 3 ]

2 голосов
/ 28 апреля 2020

l oop выполняется только тогда, когда i не равно j из-за условия

for (i,j; i!=j; ++i, --j)
          ^^^^

Когда i равно j тело l oop не получает управление, потому что условие оценивается как false.

Вы должны изменить условие в l oop. Также оператор break является избыточным.

Вот демонстрационная программа.

#include <iostream>

int main()
{
    for ( int i = 8, j = 12;  not ( j < i ); ++i, --j )
    {    
        if ( i == j ) 
        {     
            std::cout << "i = j" << "\n";
        }
        else 
        {
            std::cout << i <<" is not equal to " << j <<"\n"; 
        }
    }       
}

Его вывод

8 is not equal to 12
9 is not equal to 11
i = j

Обратите внимание на это в любом случае в Вообще, вы не можете использовать условие i != j в l oop, потому что, когда этот диапазон содержит четное число значений, вы можете получить бесконечное l oop. Например, рассмотрим случай, когда i равно 10 и j равно 11. В этом случае после первой итерации l oop i будет равно 11, а j будет равно 10 и снова i != j .:)

1 голос
/ 28 апреля 2020

Вы могли бы использовать для (; i <= j; ++i, --j).

Ниже приведена измененная версия вашего кода, только что измененная с != на <=:

#include <iostream>

int main()
{

    int i = 8;
    int j = 12;

    for (; i <= j; ++i, --j)
    {
        if (i == j)
        {
            std::cout << "i = j" << std::endl;
        }
        else
            std::cout << i << " is not equal to " << j << "\n";
    }

    return 0;
}

Вывод:

8 is not equal to 12
9 is not equal to 11
i = j
0 голосов
/ 28 апреля 2020

Это потому, что ваши циклы останавливаются, когда i равен j, прежде чем их распечатывать. И поскольку вы выходите из вашего l oop, когда i предполагается равным j, вы можете переписать его следующим образом:

    for (int i = 8, j = 12; i != j; ++i, --j)
        std::cout << i << " is not equal to " << j << "\n";

    std::cout << "i = j\n";
...