2014-09-23 115 views
-5
#include <memory> 
#include <functional> 

#include <zmq.hpp> 
#include <zhelpers.hpp> 

void main(){ 
    char identity[10] = {}; 
    sprintf(identity, "%04X-%04X", within(0x10000), within(0x10000)); 
    printf("%s\n", identity); 
} 

我採取參考從這裏開始: https://github.com/imatix/zguide/blob/master/examples/C%2B%2B/asyncsrv.cpp爲什麼這個函數不會生成隨機數字?

+1

什麼是「內()」?請說明觀察到的行爲,預期的行爲。 – DevSolar 2014-09-23 07:52:41

+0

@DevSolar也許是它的一個功能。我給審查員提供了參考..在鏈接 – monsterrrrr 2014-09-23 07:53:40

+1

「也許」,這是你的答案。您不能從網絡上覆制和粘貼代碼片段,並期望它們能夠正常工作,尤其是當您不包含相同的頭文件並鏈接相同的庫文件時尤其如此。即使如此,你應該*先了解*代碼... – DevSolar 2014-09-23 07:54:57

回答

1

我不知道是什麼within(),但你可能需要使用新的方法來生成與C++11介紹隨機數。該鏈接有一個很好的例子。

在情況下,鏈接將成爲將來的某個時間無效,這裏的相關代碼:

#include <iostream> 
#include <random> 
int main { 
    // Seed with a real random value, if available 
    std::random_device rd; 

    // Choose a random number between 1 and 6 
    std::default_random_engine engine(rd()); 
    std::uniform_int_distribution<int> uniform_dist(1, 6); 
    int randomNumber = uniform_dist(engine); 
    int anotherRandomNumber = uniform_dist(engine); 
    std::cout << "Randomly-chosen number: " << randomNumber << '\n'; 
    std::cout << "Another Randomly-chosen number: " << anotherRandomNumber << '\n'; 
} 
1

雖然我毫不猶豫地回答這樣一個貧困的問題...

考慮的within()的定義由麥克·西摩發現,你的代碼就相當於:

#include <stdlib.h> 
#include <stdio.h> 

#define within(num) (int) ((float) (num) * rand()/(RAND_MAX + 1.0)) 

void main(){ 
    char identity[10] = {}; 
    sprintf(identity, "%04X-%04X", within(0x10000), within(0x10000)); 
    printf("%s\n", identity); 
} 

此代碼產生(僞)隨機數。你可能會感到困惑的是,它在程序的每次運行中確實生成了相同的(僞)隨機數。然而,這就是僞隨機數發生器:鑑於相同的種子(因爲你不通過srand()種子發電機),他們產生相同的數字序列。 (因此「僞」。)

我強烈建議額外閱讀,如在man rand