我在我的书中进行了一次练习,这让我通过一系列的尝试来解答答案,这些尝试花了我几个小时来配置。我是c ++和编程的新手,这让我缺乏知识(实际上我正在家里学习这本书)。所以我有几个问题,我希望你能回答它们并在正确的地方“资产”我的大脑。
在提问之前,演习是:
“编写一个返回随机浮点的随机数生成器 数字介于0.0和1.0之间。 (提示:调用rand,将结果r转换为type 通过使用static_cast(r)加倍,然后除以最高值 在int范围内,RAND_MAX。)确保使用。声明函数 双返回类型。“。
问题:
srand(time(nullptr))
背后的主要功能/理念是什么?
我一直收到c4244的警告('参数':从'time_t'转换为'unsigned int')。我正在寻找答案,我发现问题出在srand
命令中......有人可以解释一下吗?
我不是真正清楚static_cast
和所有其他3种投射类型。我知道在static_cast
我可以从括号到左边的大括号定义一个新的枚举类型:static_cast<double>(r)
。但是,每个演员(dynamic_cast
,reinterpret_cast
和const_cast
)的限制/定义是什么?我什么时候使用它们?
我发现我必须在(RAND_MAX
)语句之前声明一个double,但我不知道为什么它必须是double而不是int或float?支持RAND_MAX
?
这是我写的代码(注意:我正在使用#include "stdafx.h"
前标题,以防......但在书中没有提到任何关于它的内容):
#include "stdafx.h"
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
double rand_(int r);
int main() {
int n;
double r;
cout << " choose a number: ";
cin >> n;
srand(time(nullptr));
for (int i = 0; i <= n; i++) {
r = rand_(n) ;
cout << r << " ";
}
return 0;
}
double rand_(int r) {
static_cast<double>(r);
return rand() / double(RAND_MAX);
}
如果您发现任何基本编码的“清除”错误,请更正我。
感谢所有回答和支持这篇文章的人。未来的希望也可以这样做。
答案 0 :(得分:0)
srand(time(nullptr));
它用于初始化伪随机数生成器,使用种子,从当前时间获得(每次运行ptogramm时获取不同的随机数)。 srand()接受unisgned int参数,time()返回time_t,所以这是关于转换的警告。
rand() / double(RAND_MAX)
rand()返回整数值,RAND_MAX是整数常量,因此要获得浮点除法,而不是整数除法,RAND_MAX被转换为浮点类型。
至于何时使用哪种类型的广告,我非常确定你可以找到有关SO或cppreference上每个特定演员的信息。