当我写这段代码时:
#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 ++新手。
答案 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());
}
}