c++ 有人能解释一下这段代码的输出吗[关闭]

xoefb8l8  于 2023-08-09  发布在  其他
关注(0)|答案(2)|浏览(100)

已关闭。此问题需要details or clarity。它目前不接受回答。
**希望改进此问题?**通过editing this post添加详细信息并阐明问题。

7天前关闭
Improve this question

// 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++?

yeotifhr

yeotifhr1#

在你的代码中,这里:

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,你可以把上面的逻辑反过来,在每次迭代中做额外的增量,但在此之前,当i不是0时,你可以使用continue

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


条件可以写成if (i)(参见上文,0bool的上下文转换产生false)。也许这就是你的出发点,你没有删除!= 0,而是从条件中删除了i !=

eqoofvh9

eqoofvh92#

要理解for循环中发生了什么,需要记住i的哪个值进入循环。在C++中,它是当前值,在本例中从i = 0开始。
代码永远不会进入if (0)块,因为0被视为false。因此,循环每次求值时将i递增1。因此,在第一轮求值中,当它进入循环体时,它以i = 1的形式退出。现在循环增量规则将2加到i上,使其成为您在输入中看到的i = 3
接下来的步骤都遵循相同的模式。在循环体中添加1,然后在下一个“入口”处添加2,使i成为6等。我建议你用一张纸来遵循这个解释,并自己理解剩下的输出。

相关问题