繁体   English   中英

比较 c++ 中的两个变量

[英]comparing two variables in c++

学习 c++ 并且我确定我忽略了一些明显的东西,但我不确定为什么我没有收到i == j的消息,即使在第 3 次迭代之后数字是相同的?

这是 output:

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"; 

   }
}

由于条件,仅当i不等于j时才执行循环

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

i等于j时,循环体不会获得控制,因为条件评估为false

您应该更改循环中的条件。 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"; 
        }
    }       
}

它的 output 是

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

请注意,在任何情况下,一般情况下您都不能在循环中使用条件i != j ,因为当此范围包含偶数个值时,您可以获得无限循环。 例如,考虑i等于10j等于11的情况。 在这种情况下,在循环的第一次迭代之后, i将等于11j将等于10 ,并且再次i != j .:)

您可以使用 for (; 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;
}

Output:

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

那是因为你的循环在i等于j时停止,然后才打印出来。 而且由于当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";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM