【发布时间】:2019-03-03 16:18:08
【问题描述】:
C++ 新手。我想做一个像roll_die(unsigned int seed = ???) 这样的函数,默认情况下,该函数使用srand(time(NULL)) 在返回值之前为RNG 播种,但也允许用户指定种子。这就是我的作品
#include <iostream>
#include <ctime>
int roll_die(unsigned int seed = 0){
// Returns a random integer between 1 and 6
// time(NULL) is the number of seconds since 00:00 hours, Jan 1, 1970 UTC
// Logic
srand(seed);
int randnum = rand();
// Print what's going on
std::cout << "The random seed is: " << seed << std::endl;
std::cout << "The max random number is: " << RAND_MAX << std::endl;
std::cout << "The randomly chosen number is: " << randnum <<std::endl;
// Return the result
int result = randnum % 6 + 1;
return result;
}
这很好,但它不默认为 随机 种子。如果我尝试做类似int roll_die(unsigned int seed = time(NULL)){...} 的事情,我会收到警告
Unable to parse C++ default value 'time(NULL)' for argument seed of function roll_die
我假设是因为 time(NULL) 不返回 int。
这样做的正确方法是什么?
【问题讨论】:
-
@Slava 虽然欺骗是 OP 必须处理的事情,但这并不是问题所在。他们有 2 个问题,并在您为问题 2 关闭它时询问问题 1。我不确定它是否应该按原样关闭
-
@NathanOliver 我认为它涵盖了 OP 的所有问题——这个函数根本不应该调用 srand() 。正确的方法是在 main 中调用
srand(),dup 完美地解释了它。 -
@Ben 你的返回随机数的函数根本不应该调用 srand() 并且 dup 解释了原因。
-
@Slava 而被骗目标如何回答?
-
我觉得Converting time_t to int这个问题真的很接近你想要的。
标签: c++