2016-10-16 78 views
-3

我有一個學校需要創建彩票計劃的作業。它應該允許用戶輸入六個數字,然後生成六個隨機數字進行比較。我得到的輸入工作,但我遇到了一個問題,隨機數發生器(位於while循環)被困在一個無限循環,我絕對不知道是什麼造成它,因爲我從來沒有一個無限循環任何以前的計劃。如果有人可以查看代碼並可能確定錯誤,我將不勝感激。如何從無限循環中獲得這個隨機數生成器?

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

using namespace std; 

void randomizeSeed(); 
int randomRange(int min, int max); 
int getInteger(); 

int main() 
{ 
randomizeSeed(); 

const int minNumber = 1; 
const int maxNumber = 49; 
const int Size = 6; 
int luckyNumbers[6] = {}; 
int randomNumber = randomRange(minNumber, maxNumber); 
int winningNumbers[6] = {}; 

cout << "Enter six numbers between 1 and 49...\n"; 
{ 
    for (int i = 0; i < Size; i++) 
    { 
     luckyNumbers[i] = getInteger(); 
    } 
    for (int i = 0; i < Size; i++) 
    { 
     for (int i = 0; i < Size - 1; i++) 
     { 
      if (luckyNumbers[i] > luckyNumbers[i + 1]) 
      { 
       int temp = luckyNumbers[i]; 
       luckyNumbers[i] = luckyNumbers[i + 1]; 
       luckyNumbers[i + 1] = temp; 
      } 
     } 
    } 
    cout << "Lucky Numbers: "; 
    for (int i = 0; i < Size; i++) 
    { 
     cout << luckyNumbers[i] << " "; 
    } 
    cout << "\n"; 
    cout << "Press any button to see the Winning Numbers.\n"; 
    system("pause"); 

    bool exist = true; 
    while (exist == true) 
    { 
     int count = 0; 
     cout << "Winning Numbers: "; 
     for (int j = 0; j < 6; j++) 
     { 
      winningNumbers[j] = randomRange(1, 49); 
      cout << winningNumbers[j] << " "; 
      system("pause"); 
     } 
    } 
} 
} 

void randomizeSeed() 
{ 
srand(time(NULL)); 
} 

int randomRange(int min, int max) 
{ 
int randomValue = rand() % (max + 1 - min) + min; 
return randomValue; 
} 

int getInteger() 
{ 
int value = 0; 
while (!(cin >> value) || (value >= 50) || (value <= 0)) 
{ 
    cin.clear(); 
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
} 
return value; 
} 
+0

「如果有人可以請看代碼」 - 那個人是你!使用你的調試器。 –

+3

解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –

+3

那麼,你將「exist」設置爲false以結束循環? – krzaq

回答

0
for (int i = 0; i < Size; i++) 
    for (int i = 0; i < Size - 1; i++) 
     if (luckyNumbers[i] > luckyNumbers[i + 1]) 
     { 
      int temp = luckyNumbers[i]; 
      luckyNumbers[i] = luckyNumbers[i + 1]; 
      luckyNumbers[i + 1] = temp; 
     } 

你有兩個迴路,他們都使用i。你可能意味着使用第二個循環與另一個變量的名稱,例如:

for (int i = 0; i < Size; i++) 
{ 
    for (int k = 0; k < Size - 1; k++) 
    { 
     if (luckyNumbers[i] > luckyNumbers[k + 1]) 
     { 
      int temp = luckyNumbers[i]; 
      luckyNumbers[i] = luckyNumbers[k + 1]; 
      luckyNumbers[k + 1] = temp; 
     } 
    } 
} 

如果你設置你的編譯器警告級別設置爲4,則編譯器應該提醒你注意這些錯誤。嘗試解決所有編譯器警告。