如果这个问题已经回答了,我深表歉意。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main () {
srand( time(NULL) );
cout << rand();
}
“隐式转换丢失整数精度:'time_t‘(也称为'long')到'unsigned int'”
是我在执行上面的代码时得到的错误消息。我使用的是xcode 4.6.1。现在,当我使用不同的编译器时,比如来自codepad.org的编译器,它可以很好地执行,生成看起来像是随机数的东西,所以我假设这是一个xcode问题,我需要解决?
我刚刚开始编程,所以在这方面我是一个完全的初学者。是我的代码有问题,还是我的编译器有问题?
任何帮助都将不胜感激!
发布于 2013-07-12 23:21:33
srand函数的参数类型为unsigned int,time_t为long类型。long中的高4个字节被去掉了,但它没有问题。srand将使用4个较低的时间字节随机化rand算法,因此您提供了比所需更多的数据。
如果出现错误,请尝试将time_t类型显式转换为unsigned int:
srand( static_cast<unsigned int> time(NULL) );
另一件有趣的事情是,如果你在同一秒内运行你的程序两次,你会得到相同的随机数,这有时是不受欢迎的,因为如果你用相同的数据播种rand算法,它将生成相同的随机序列。或者,当您调试某些代码并需要再次测试相同的行为时,这可能是可取的……然后您只需使用类似于srand(123456)
的代码
发布于 2013-11-22 03:20:14
#include <stdlib.h>
#include <iostream> //rand
#include <time.h> //time
float randomizer(int VarMin, int VarMax){
srand((unsigned)time(NULL));
int range = (VarMax - VarMin);
float rnd = VarMin + float(range*(rand()/(RAND_MAX + 1.0)));
return rnd;
}
https://stackoverflow.com/questions/17618264
复制相似问题