0

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

#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 语句在我将 1 添加到 x 之前检查 x < 10 时程序甚至将 x 变为 10...请解释一下。

4

6 回答 6

5

Order of operations is:

  • 1) stop the loop if 3) found x was >= 10 (if while1 is false)
  • 2) print out x
  • 3) check if x >= 10 here and set while1 to false if it is
  • 4) increment x

When x is 9 we proceed as follows:

  • Don't stop the loop (while1 is true)
  • Print out 9
  • x is not >= 10 yet, set while1 to true
  • x is incremented to 10
  • Don't stop the loop (while1 is true)
  • Print out 10
  • x is now >= 10, set while1 to false
  • x is incremented to 11
  • We stop the loop as while1 was set to false

So, x gets printed out when it's 10. The problem is that, the way you check and act on the check, you do one loop too many before stopping.

One way to fix this is

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

Now the loop will not execute on the same pass through that x is 10, not the pass immediately afterwards.

Even better is this:

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

Which is clearer about its intent over looping over incrementing values of x.

于 2013-05-03T05:33:37.680 回答
0

if x>=10 在循环中,显然循环将在 while 循环中达到 10 时再迭代一次

于 2013-05-03T06:25:59.493 回答
0

你正在做的是:

  1. 要求程序打印 x 的值
  2. 检查 x 是否小于 10
  3. 如果是,则将 while1 设置为 true。否则将 while1 设置为 false
  4. 将 x 的值加 1(不管 while1 是真还是假)

...

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

你的程序开始另一个循环,因为 while1 = true

  • 在第 11 个循环开始时,x = 10。
  • 打印 10
  • 由于 x 现在等于 10,因此将 while1 设置为 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
}

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

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

休息; 如果 x >= 10 不会增加 x 或再次通过循环,将让您跳出 while 循环...

应该是安全的,除非你打算在那个 while 循环中做更多的事情......

于 2013-05-03T07:53:45.760 回答
0

该程序得到x10因为x = x + 1发生在if.
因此,在循环的一次执行期间,它将检查,然后如果 x 小于 10,它将为while1真。否则它是while1错误的。之后x无论如何它都会增加。如果while为真,则重复此过程。

于 2013-05-03T05:32:50.543 回答
0
else if (x >= 10)
{
    while1 = false;
}
x = x+1;

我将问题理解为:为什么 x 会变为 10?这个对吗?

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

于 2013-05-03T05:36:06.640 回答
0

如果您不想在 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();
}
于 2013-05-03T05:37:12.587 回答