// 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++ 上没有发生?
在您的代码中,此处:
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 !=
。
要了解
for
循环中发生的情况,您需要记住 i
的哪个值进入循环。在 C++ 中,它是当前值,在您的情况下以 i = 0
开始。
代码永远不会进入
if (0)
块,因为 0
被视为 false
。因此,循环每次计算时都会将 i 递增 1。因此,考虑到在第一轮评估中 $i = 0$ 当它进入循环体时,它退出时是 i = 1
。现在,循环增量规则将 2 添加到 i
,使其成为您在输入中看到的 i = 3
。
接下来的步骤都遵循相同的模式。您在循环体中添加 1,然后在下一个“入口”添加 2,从而使
i
成为 6 等。我建议您用一张纸遵循此解释,并自己理解其余的输出。