2015-05-10 106 views
-1

我需要在用戶定義的範圍內生成一個隨機整數。它需要使用一個變量來存儲函數調用的結果,並且只需要在每次調用時更新該變量。需要在指定範圍內生成一個隨機整數

,其使用輸入來產生隨機數的函數:

int genRandInt (int smallnum, int bignum) { 
    int randnum = smallnum + (rand() % (bignum - smallnum + 1)); 

    return randnum; 
} 

主要功能:

int main() 
{ 
    srand(time(NULL)); 
    int smallnum; 
    int bignum; 
    int z = genRandInt(smallnum, bignum); 

    cout << "Enter the smallest possible number: "; 
    cin >> smallnum; 

    cout << "Enter the biggest possible number: "; 
    cin >> bignum; 

    genRandInt(smallnum, bignum); 
    cout << "Random number: " << z << endl; 

    genRandInt(smallnum, bignum); 
    cout << "Random number: " << z << endl; 

    genRandInt(smallnum, bignum); 
    cout << "Random number: " << z << endl; 

    return 0; 
} 

程序運行,但它一直返回三個相同數量的,其中沒有一個處於用戶定義的範圍內。例如,對於每個函數調用,執行10和100的範圍將返回267499385。

任何想法這裏有什麼問題嗎?我很生鏽。

編輯:用int z;替換int z = genRandInt(smallnum, bignum);的初始定義。然後我用z = genRandInt(smallnum, bignum);替換了三個函數調用,現在看起來工作正常。這是正確的嗎?還是有更好的方法呢?

EDIT2:看來這是一個很好的方法。感謝大家。

回答

3

它不會改變的原因是,你有這樣的:

genRandInt(smallnum, bignum); 

三次。在每種情況下將其更改爲:

z = genRandInt(smallnum, bignum); 

這會將結果存儲在變量中。

您的結果超出範圍的原因是您第一次撥打genRandInt時既沒有定義smallnum也沒有定義bignum。由於您將指定爲結果爲z並且永遠不會更改它,那麼這就是您的問題。

+0

用'int z;'代替'int z = genRandInt(smallnum,bignum);'的初始定義。然後我用'z = genRandInt(smallnum,bignum)'替換了三個函數調用;'現在看起來工作正常。這是正確的嗎?還是有更好的方法呢? –

0

您分配一個值z沒有先初始化smallnumbignum

int smallnum; 
int bignum; 
int z = genRandInt(smallnum, bignum); 

然後,你要genRandInt()還呼籲不實際結果分配給z,所以你的代碼打印的原始垃圾值第一個電話。

+0

用'int z;'代替'int z = genRandInt(smallnum,bignum);'的初始定義。然後我用'z = genRandInt(smallnum,bignum)'替換了三個函數調用;'現在看起來工作正常。這是正確的嗎?還是有更好的方法呢? –

+0

@CodyHayes:是的,這當然是一個好辦法。對於那種簡單的程序,那裏確實沒有太多的改進空間。 –

0

您不更新z。它只是爲你的函數的返回值設置一次。

相關問題