有人可以解释一下这段代码的输出吗

问题描述 投票:0回答:2
// Online C++ compiler to run C++ program online
#include <iostream>
using namespace std;

int main() {
    
    for (int i = 0; i<=15;i+=2){
        cout<<i<<" ";
        if (0){
            continue;
          
        }
        i++;
    }
        
    }

输出 - 0 3 5 7 9 11 13 15

我得到 0 3 6 9 12 15

如何继续工作。它是跳过 if 块还是整个 for 循环?为什么 i++ 上没有发生?

c++ for-loop continue
2个回答
1
投票

在您的代码中,此处:

    if (0){
        continue;
      
    }

整数文字

0
根据上下文转换为
bool
,结果始终为
false
(非零整数将产生
true
)。可以删除
if
语句而不改变行为,因为
continue
从未实际执行过:

int main() {
    
    for (int i = 0; i<=15;i+=2){
        cout<<i<<" ";
        i++;
    }            
}

如果可能,可以在(while 循环的)主体中增加计数器,或者通过 for 循环的迭代表达式增加计数器,但不能同时增加两者。这更简单并且达到相同的效果:

    for (int i = 0; i<=15;i+=3){
        cout<<i<<" ";
    }         

要获得此输出:

 0 3 5 7 9 11 13 15

您可以在每次迭代中增加

2
,仅在第一次迭代中,当
i==0
您再增加一次时:

    for (int i = 0; i<=15;i+=2){
        cout<<i<<" ";
        if (i == 0) ++i;
    }         

如何继续工作。它是跳过 if 块还是整个 for 循环?

continue
跳过封闭循环的剩余部分。有关详细信息,请参阅此处https://en.cppreference.com/w/cpp/language/continue

为什么 i++ 上不进行?

在您的代码中,

continue
对以下
i++
没有影响,因为
if(0)
是死分支。


如果你想使用

continue
,你可以扭转上面的逻辑,并在每次迭代中进行额外的增量,但在
continue
之前,当
i
不是
0
时:

    for (int i = 0; i<=15;i+=2){
        cout<<i<<" ";
        if (i != 0) continue;
        ++i;
    }  

条件可以写为

if (i)
(参见上文,
0
bool
的上下文转换产生
false
)。也许这就是您的来源,您没有删除
!= 0
,而是从条件中删除了
i !=


0
投票

要了解

for
循环中发生的情况,您需要记住
i
的哪个值进入循环。在 C++ 中,它是当前值,在您的情况下以
i = 0
开始。

代码永远不会进入

if (0)
块,因为
0
被视为
false
。因此,循环每次计算时都会将 i 递增 1。因此,考虑到在第一轮评估中 $i = 0$ 当它进入循环体时,它退出时是
i = 1
。现在,循环增量规则将 2 添加到
i
,使其成为您在输入中看到的
i = 3

接下来的步骤都遵循相同的模式。您在循环体中添加 1,然后在下一个“入口”添加 2,从而使

i
成为 6 等。我建议您用一张纸遵循此解释,并自己理解其余的输出。

© www.soinside.com 2019 - 2024. All rights reserved.