我最近刚开始自学C ++。我遇到了这个问题:
打印出1到100之间的所有整数,这些整数不能被3,或5或7整除。
我在两个不同的测试中使用了for
和while
循环,for
循环正常工作,但下划线在while
循环的两个循环后一直闪烁。我不小心asked this on the wrong SE site时包含了图片。
为什么会这样?
for loop
#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;
}
答案 0 :(得分:2)
快速修复:
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;
答案 1 :(得分:2)
while
与for
之间的主要区别在于,当您for
时,i++
循环会进行递增(第三部分,在您的情况下为continue
)并且while
循环没有,因为你的递增只是循环中某处的另一行代码。这就是为什么一个解决方案是在继续之前添加i++
的原因。你可以想象在某些情况下这可能会变得棘手。
出于这个原因,一些开发人员更喜欢for
,如果他们可能会继续。其他人则转向下一个选择。从0开始,先增加,然后检查,现在如果你继续,你会没事的。还有一些人将增量移到了条件中:
while(++i<=100)
我不是完全推荐这个,我向你展示这样,当你遇到一个while
循环,在这个条件下进行递增时,你会理解这样做的动机之一。
在C ++中有很多方法可以做大多数事情,它们之间的区别可能很微妙。这不是您最后一次遇到这种情况。