2013-05-03 64 views
0

好吧,初学者,放松一下。谢谢。为什么一个循环在C++中做到这一点

#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(); 
} 

好了,所以我不明白为什么程序甚至会X 10,如果我有if语句检查前如果x < 10我有1添加到x ...请解释。

+0

缩进,缩进,缩进... – 2013-05-03 05:29:59

+0

'while = false;'你确定这段代码编译了吗? – 2013-05-03 05:30:33

+0

这甚至不会编译。以这个+标识开头 – SomeWittyUsername 2013-05-03 05:31:00

回答

0

程序获得x10,因为x = x + 1发生在if之外。
所以在循环的一次执行过程中,它会检查,然后如果x小于10,它将使while1为真。否则它会使while1为false。之后无论如何增加x。 然后它重复这个过程,如果while为真。操作

5

顺序是:

  • 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
  • 唐“T停止循环(while1为true)
  • 打印出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的值更清晰。

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

我把这个问题理解为:为什么x变为10?这是正确的吗?

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

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(); 
} 
0

如果x> = 10的环比明显的循环,当它在while循环中达到10将遍历一次

0

什么,你正在做的是:

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

...

  • 在第10圈开始时,X = 9.
  • 打印出9
  • 由于x仍小于10,while1保持为真
  • 在第10次循环结束时,X = 10和while1 =真

你的程序开始另一个循环以来while1 =真

  • 在第11次循环的开始,X = 10。
  • 打印出10
  • 由于x现在等于10,while1设置为false
  • 在第11圈结束时,X = 11和while1 =假

做的最好的事情就是刚刚

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; 
} 

break;如果x> = 10,会让你跳出while循环而不增加x或者再次通过循环...

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

相关问题