C ++函数和随机数

时间:2013-06-30 20:10:05

标签: c++ function random numbers

当我写这段代码时:

#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>

using namespace std;


int random = std::rand() % 9 + 1;



int main()
{
    std::srand(std::time(0));
   if(random==1 || random ==2 || random == 3){
        cout << "Wolf" << endl;
   }  else if(random==4 || random ==5 || random == 6){
        cout << "Bear" << endl;
   }  else if(random==7 || random ==8 || random == 9){
        cout << "Pig" << endl;
   }
}

每次我运行它都会得到其他印刷品(狼,猪或熊),就像我想要的那样。 但是当我在我的代码中添加这个函数时:

#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>

using namespace std;


int random = std::rand() % 9 + 1;

void func(){
   if(random==1 || random ==2 || random == 3){
        cout << "Wolff" << endl;

   }  else if(random==4 || random ==5 || random == 6){
        cout << "Bearr" << endl;

   }  else if(random==7 || random ==8 || random == 9){
        cout << "Pigg" << endl;

   }
}

int main()
{
    std::srand(std::time(0));


   if(random==1 || random ==2 || random == 3){
        cout << "Wolf" << endl;
        func();
   }  else if(random==4 || random ==5 || random == 6){
        cout << "Bear" << endl;
        func();
   }  else if(random==7 || random ==8 || random == 9){
        cout << "Pig" << endl;
        func();
   }
}

我希望每次运行它都可以打印其他东西,比如Bear Bearr,Wolf Wolff或Pig Pigg。但是每当我运行它时我都会得到相同的结果。问题是什么?
请帮助我,我是C ++新手。

2 个答案:

答案 0 :(得分:4)

在调用 main之前执行全局初始值设定项。因此,您永远不会重新设置您的PRNG,因此总是绘制相同的“随机”数字。

那就是说,我不相信你的每个代码都会产生不同的输出,因为它们具有相同的初始化顺序问题。

答案 1 :(得分:0)

编辑:改变以符合您所说的“熊”,“熊”,“猪”,“猪”的目标。

int random = std::rand() % 9 + 1;

声明一个名为“random”的全局变量,它在启动期间在main()之前分配一个值。该值将是(由9)模数的rand()的默认返回值加1。它不会自动更改。

您似乎正在寻找的是

int random()
{
    return (std::rand() % 9) + 1;
}

定义一个调用rand的函数,将值除以9然后返回一个。编辑:要在“func()”函数中查看相同的值,请将值或引用作为函数参数传递:

#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>

using std::cout;
using std::endl;

int random() {
    return (std::rand() % 9) + 1;
}

void func(int randNo){
    switch (randNo) {
        case 1: case 2: case 3:
            cout << "Wolff" << endl;
        break;
        case 4: case 5: case 6:
            cout << "Bearr" << endl;
        break;
        case 7: case 8: case 9:
            cout << "Pigg" << endl;
        break;
    }
}

int main()
{
    std::srand(std::time(0));

    int randNo = random();
            switch (randNo) {
        case 1: case 2: case 3:
            cout << "Wolf" << endl;
            func(randNo);
        break;
        case 4: case 5: case 6:
            cout << "Bear" << endl;
            func(randNo);
        break;
        case 7: case 8: case 9:
            cout << "Pig" << endl;
            func(randNo);
        break;
    }

            cout << "And now for something completely different." << endl;
    for (size_t i = 0; i < 10; ++i) {
        cout << i << ": ";
        func(random());
    }
}