2013-05-03 66 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或者再次通過循環...

應該是安全的,除非你要在循環中做更多的事情...

相關問題