当我使用fstream生成文件时,我从未得到超过32760的整数.
下面的方法生成文件,然后将其读回并检查32750以上的任何整数.我通常在32750和32760之间得到3-5个整数.为什么会发生这种情况,我该如何解决?是种子问题还是随机函数的实际使用?
// sizeOfArray = 10000voID generatefile() { ofstream fout("unsorted.txt"); srand(time(NulL)); // Generating the file int num; for(int i = 0; i < sizeOfArray; i++) { num = rand() % 100000; if(i < sizeOfArray-1) //fout << i+1 << ": " << num << endl; fout << num << endl; else //fout << i+1 << ": " << num; fout << num; } // Reading the file Back ifstream fin("unsorted.txt"); for(int i = 0; i < sizeOfArray; i++) { fin >> num; if(num > 32750) cout << num << endl; } cin.get();}
解决了
使用下面提供的答案,我生成了500次文件
我收到的最高整数为99931.
当您需要生成大于RAND_MAX的数字时,请多次调用rand(),每次乘以RAND_MAX.例如,在您的情况下,以下代码应该工作(我假设您的int有32位):
num = rand();num *= RAND_MAX;num += rand();num %= 100000;
注意,仅仅将三个随机数加在一起以获得期望的范围将不会产生与乘法和加法相同的随机分布.
总结以上是内存溢出为你收集整理的c – 无法为整数生成全范围的随机数全部内容,希望文章能够帮你解决c – 无法为整数生成全范围的随机数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)