2012-02-23 13 views
8

संभव डुप्लिकेट एक ही नंबर पैदा:
What's the Right Way to use the rand() Function in C++?रैंड() संकलन पर

मैं कैसे रैंड() फ़ंक्शन का उपयोग करने के लिए और मैं में एक छोटे से अनुमान लगा खेल लिखा सीखने किया गया है सी ++ देखा गया है, लेकिन समस्या यह है कि इससे कोई फर्क नहीं पड़ता कि जेनरेट किए गए नंबरों को मैं कितनी बार संकलित करता हूं -> 41

#include <iostream> 
#include <cstdlib> 
#include <conio.h> 
using namespace std; 

int main() 
{ 
    int x = rand()%100; 
    int y=0; 
    cout << "Ghiceste numarul!" << endl; 
    cin >> y; 

    while(y != x) { 

     if(y > x) { 
      cout << "Numarul tau este prea mare! Incearca un numar mai mic!" << endl; 
      cin >> y; 
      } 

      if(y < x) { 
       cout << "Numarul tau este prea mic!" << endl; 
       cin >> y; 
       } 

     if (y == x) { 
     cout << "FELICITARI, AI GHICIT NUMARUL!\n"; 
     return 0; 
     } 
    } 
} 

मैंने रैंड() के अधिकतम मूल्य को बदलने की भी कोशिश की और जब तक मैंने इसे < 41.

कोई विचार? मेरे पास सुराग नहीं है कि यह क्यों हो रहा है। मैं codeblocks आईडीई का उपयोग कर रहा हूँ और मैं के पुनर्निर्माण की कोशिश की (Ctrl + F11)

+1

[SSCCE] के लिए +1 (http://sscce.org/):

तो main की शुरुआत में निम्नलिखित जोड़ें। –

उत्तर

11

main की शुरुआत में

srand(time(0)); 

जोड़ने का प्रयास करें।

+7

ऐसा करें, लेकिन ध्यान रखें कि आपको केवल अपने कार्यक्रम की शुरुआत में इसे करने की आवश्यकता है। हर बार जब आप 'रैंड()' कहते हैं तो ऐसा न करें। – spencercw

+5

और चेतावनी से अवगत रहें: यदि आप प्रति सेकंड एक से अधिक बार अपना प्रोग्राम चलाते हैं, तो यह यादृच्छिक बीज का पुन: उपयोग करेगा (और जब भी आप दूसरे पास तक प्रोग्राम चलाते हैं तो आपको वही संख्याएं दें)। –

+0

दोनों अच्छे अंक। अपने प्रश्न पर दस बार की टिप्पणी में संदर्भित एसओ पोस्ट को देखना सुनिश्चित करें। –

2

यह यादृच्छिक संख्या जेनरेटर के लिए हर बार एक ही बीज का उपयोग कर रहा है। यदि आप प्रत्येक बार set the seed of the random number generator एक अलग मूल्य पर हैं, तो आपको अलग-अलग नंबर मिलेंगे। डॉक्स के अनुसार:

आदेश यादृच्छिक की तरह नंबर जेनरेट करने के लिए, srand आम तौर पर कुछ विशिष्ट मूल्य के लिए आरंभ नहीं हो जाता, निष्पादन समय के साथ संबंधित उन जैसे। उदाहरण के लिए, फ़ंक्शन टाइम द्वारा अस्वीकृत मान ( शीर्षलेख में घोषित) प्रत्येक सेकेंड अलग है, जो कि अधिकांश यादृच्छिक आवश्यकताओं के लिए पर्याप्त विशिष्ट है।

0

आपको रैंड() फ़ंक्शन में बीज पारित करने की आवश्यकता है जो प्रत्येक बार प्रोग्राम चलाए जाने पर अलग होगा (जैसे टाइमस्टैम्प)। आम तौर पर, वास्तव में यादृच्छिक संख्याएं उत्पन्न करना संभव नहीं है लेकिन आप छद्म-यादृच्छिक प्राप्त कर सकते हैं।

5

आप इस प्रकार रैंड() फ़ंक्शन के लिए एक बीज प्रारंभ करने में पहला प्रयास करना चाहिए:

srand (time(NULL)) 
main की शुरुआत में

। बनाओ शीर्षक में time.h शामिल करना सुनिश्चित करें

#include <time.h> 

या

#include <ctime> 
0

आप srand() main की शुरुआत में, आम तौर पर उपयोग करते हुए समय के साथ रैंड समारोह() बीज की जरूरत है; फ़ंक्शन

0

यादृच्छिक संख्या जनरेटर को आपके प्रोग्राम के प्रत्येक भाग पर एक ही डिफ़ॉल्ट स्थिति के साथ बीजित किया जा रहा है।

प्रत्येक रन पर अलग-अलग परिणाम प्राप्त करने के लिए, आपको srand() पर कॉल करके और एक नए बीज में गुजरकर अपने प्रोग्राम में यादृच्छिक संख्या जनरेटर को बीज करने की आवश्यकता है। बीज के रूप में time(NULL) के वापसी मूल्य का उपयोग करना आम है, क्योंकि यह गारंटी देगा कि आपको अपने कार्यक्रम के विभिन्न रनों पर एक अलग बीज मिलता है।

srand(time(NULL)); 
संबंधित मुद्दे