【问题标题】:c++ Programming beginner--for loop and while loopc++编程初学者--for循环和while循环
【发布时间】:2014-01-27 11:59:50
【问题描述】:

我最近才开始自学 C++。我遇到了这个问题:

打印出 1 到 100 之间不能被 3、5 或 7 整除的所有整数。

我在两个不同的测试中同时使用了forwhile 循环,for 循环工作正常,但是下划线在while 循环的两个循环之后一直闪烁。我不小心asked this on the wrong SE site时附上了图片。

为什么会这样?

for循环

#include <iostream>
using namespace std;

int main()
{
    int i=1;
    for(i=0;i<=100;i++)
    {
        if(i%3==0||i%5==0||i%7==0)
        {
            continue;
        }
        cout<<i<<" ";

    }
    return 0;

} 

while 循环

#include <iostream>
using namespace std;

int main()
{
    int i=1;
    while(i<=100)
    {
        if(i%3==0||i%5==0||i%7==0)
        {
            continue;
        }
        cout<<i<<" ";
        i++;
    }
    return 0;

}

【问题讨论】:

  • 快速评论,在您的第一个循环中,在 for 循环之前声明 int i = 1 是没有意义的,因为您只是在之后直接将值重新分配为 0。只需输入for(int i=1; i&lt;=100; i++)
  • 在 continue 语句之前的 while 循环中,您必须将 i 的值增加 1,但您没有增加,因为程序进入无限循环

标签: loops visual-c++ for-loop while-loop


【解决方案1】:

快速修复:

int main()
{
    int i=1;
    while(i<=100)
    {
        if(i%3==0||i%5==0||i%7==0)
        {
            i++;
            continue;
        }
        cout<<i<<" ";
        i++;
    }
    return 0;

}

因为当 i 达到 3 时,你总是满足 if 语句并且从不增加它的值,所以它以 3 的值无限循环。

编辑:除了快速修复,我要做的是

int i=1;
while(i<=100)
{
    //negate the if statement so continue is no longer needed
    if(!(i%3==0||i%5==0||i%7==0)) 
        cout<<i<<" ";
    
    ++i; //(pre)increment in one place
}
return 0;

【讨论】:

    【解决方案2】:

    whilefor 之间的主要区别在于 for 循环执行您的递增(第三部分,在您的情况下为 i++),而 continuewhile 循环不执行,因为您的递增只是循环中某处的另一行代码。这就是为什么一种解决方案是在继续之前添加i++。您可以想象在某些情况下这可能会变得棘手。

    出于这个原因,一些开发人员更喜欢for,如果他们可能会继续的话。其他人在这段时间的顶部移动到下一个选择。从 0 开始,先增加它,然后检查,现在如果你继续,你会没事的。还有一些人将增量移动到条件中:

    while(++i<=100)
    

    我并不完全推荐这个,我把它展示给你,这样当你遇到一个while 循环时,你就会明白这样做的动机之一。

    在 C++ 中有很多方法可以做大多数事情,它们之间的区别可能很微妙。这不会是您最后一次遇到这种情况。

    【讨论】:

    • 在while条件下使用++1也很好用,谢谢分享
    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2013-09-26
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多