为什么一个循环在C++中这样做

Why is a loop doing this in C++

本文关键字:C++ 这样做 循环 一个 为什么      更新时间:2023-10-16

好吧,初学者,放松。谢谢

#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
    int x = 0;
    bool while1 = true;
    while (while1)
    {
        cout << x << "n";
        sleep(200);
        if (x < 10)
        {
            while1 = true;
        }
        else if (x >= 10)
        {
            while1 = false;
        }
        x = x+1;
    }
    cin.get();
}

好吧,所以我不明白为什么如果我有if语句检查x<10之前我在x上加了1…请解释一下。

操作顺序为:

  • 1( 如果3(发现x>=10(如果while1为false(,则停止循环
  • 2( 打印输出x
  • 3( 在此处检查x是否>=10,如果是则将while1设置为false
  • 4( 增量x

当x为9时,我们进行如下操作:

  • 不要停止循环(while1为true(
  • 打印9
  • x尚未>=10,请将while1设置为true
  • x增加到10
  • 不要停止循环(while1为真(
  • 打印10
  • x现在>=10,将while1设置为false
  • x增加到11
  • 由于while1设置为false,我们停止循环

所以,x在10的时候就会打印出来。问题是,在你检查和执行检查的方式中,你在停止之前做了太多的循环。

解决这个问题的一种方法是

while (x < 10)
{
    cout << x << "n";
    Sleep(200);
    x = x+1;
}

现在,循环将不会在x为10的同一次传递中执行,也不会在之后立即执行。

更好的是:

for (int x = 0; x < 10; ++x)
{
    cout << x << "n";
    Sleep(200);
}

这更清楚地说明了它在x的递增值上循环的意图。

程序获取x10,因为x = x + 1发生在if之外
因此,在循环的一次执行过程中,它将进行检查,然后如果x小于10,它将使while1为真。否则使while1为假。之后不管怎样都会增加x。然后,如果while为真,则重复该过程。

else if (x >= 10)
{
    while1 = false;
}
x = x+1;

我理解这个问题:为什么x会达到10这是正确的吗?

当while1设置为false时,while循环不会立即退出。当然,在退出循环后,x将等于10,因为在检查后,x增加了,所以在这个代码段之后,x实际上将是11。

如果您不想在x>=10之后打印x,请在增加x之后进行检查。

#include <iostream>
#include <windows.h>
using namespace std;
int main(
{
    int x = 0;
    bool while1 = true;
    while (while1)
    {
        cout << x << "n"
        x++;
        Sleep(200);
        if (x < 10)
        {
            while1 = true;
        }
        else if (x >= 10)
        {
            while1 = false;
        }
    }
    cin.get();
}

如果循环中x>=10,那么当循环在while循环中达到10时,循环将再次迭代

您正在做的是:

  1. 要求程序打印x的值
  2. 检查x是否小于10
  3. 如果是,请将while1设置为true。Else将while1设置为false
  4. 将x的值增加1(无论while1为true还是false(

  • 在第10个循环开始时,x=9
  • 打印9
  • 由于x仍然小于10,而1仍然为真
  • 在第10个循环结束时,x=10,while1=true

你的程序开始另一个循环,while1=真正的

  • 在第11个循环开始时,x=10
  • 打印10
  • 由于x现在等于10,而le1设置为false
  • 在第11个循环结束时,x=11,while1=false

最好的做法是只使用

int x = 0;
while(x < 10)
{
   cout << x << endl;      //this way your program will only print 0 to 9
   sleep(200);
   x++;                    //this is the same as x = x+1
}

如果你坚持使用自己的代码,我想你可以用break代替while1=false;

else if (x >= 10)
{
    break;
}

断裂;如果x>=10,将允许您突破while循环,而不增加x或再次通过循环。。。

应该是安全的,除非你要在while循环中做更多的事情。。。