2013-10-21 60 views
1

問題:C++程序骰子難點

反覆輥3個骰子直到雙打被卷(任何兩個是 相同)。每次顯示值和之後說明有多少嘗試 它獲得雙打。

我的代碼:

#include <iostream> 
#include <time.h> 
#include <stdlib.h> 
#include <string.h> 

using namespace std; 

int main() 
{ 
    srand (time(NULL)); 
    int j=1; 
    int i=0; 
    int a; 
    int b; 

    do 
    { 
     int a=(rand()%6+1); 
     int b=(rand()%6+1); 

     cout<<a<<" and "<<b<<endl<<endl; 
     j++; 
    } 
    while (a!=b); 

    cout<<"They are the same!"<<endl<<endl; 
    cout<<"It took "<<j<<" tries."; 

    return 0; 
} 

問題:

循環將不會停止。即使a和b相同,程序也不會停止。

回答

6

您正在do ... while循環內重新定義ab。在第二個ab定義之前刪除int,其中將隨機值分配給變量,它將起作用。

1

你在循環內部聲明瞭新的變量,它隱藏了你在循環之外聲明的a和b的影子。 while (a != b)正在看外面的,但你並沒有改變這些。

得到,如果你使用GCC/G ++,你也許可以救自己與-Wshadow標誌編譯器有些疼痛int a = (rand() % 6) + 1

擺脫int的。對於其他編譯器,我不知道選項是什麼,但可能有一個。至少它會在編譯時告訴你這個問題,而不是運行時。