0

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

   }
}
4

3 回答 3

2

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

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

When iis equal toj循环体没有得到控制,因为条件计算为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"; 
        }
    }       
}

它的输出是

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

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

于 2020-04-28T19:51:11.993 回答
1

你本可以使用(; 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
于 2020-04-28T19:51:09.943 回答
0

那是因为你的循环在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";
于 2020-04-28T19:51:42.470 回答