请教生成随机字符的问题
我想生成随机字符
ch = numeric_limits<char>::min()+((numeric_limits<char>::max()-numeric_limits<char>::min())*std::rand())/RAND_MAX;
RAND_MAX的值由srand(static_cast<unsigned int>(time(0)));确定
请问为什么有时ch会返回负值?
问题点数:20、回复次数:5Top
1 楼zmx0506(风之伤)回复于 2006-12-02 15:55:24 得分 0
楼主的 代码很不规范,我看过去一下还没反映过来。
这样的代码我也拿不准了,因为你里面那几个函数我都没像你这么用过。Top
2 楼crystalbi()回复于 2006-12-02 16:23:31 得分 0
srand(static_cast<unsigned int>(time(0)));是调用了系统时间生成一个rand()的种子值,
上边表达式的意思是(char类型的最小值+(char类型的最大值-char类型的最小值))×(0到1之间的一个数)
char类型的范围是(-128~127)
这种用法是红皮书Ivor Horton的C++入门经典里的,我用的是VC++2005.NET,代码我一个字都没改
为什么返回负数呢?
Top
3 楼jacknes009(阿丁)回复于 2006-12-02 17:15:21 得分 20
char ch;
srand(static_cast<char>(time(0)));
// ch = numeric_limits<int>::min();
ch = numeric_limits<char>::min()+((numeric_limits<char>::max()-numeric_limits<char>::min())*std::rand())%RAND_MAX;
int pp = ch;
cout<<ch<<endl;
cin>>ch;
return 0;
应该这样把,,你在看下把,,我试了下,,可以Top
4 楼crystalbi()回复于 2006-12-02 17:31:19 得分 0
确实那表达式错了,眼花了,唉Top
5 楼crystalbi()回复于 2006-12-02 17:33:25 得分 0
不过%还应该换成/Top




