我正在使用 ncurses 库来构建游戏。我无法生成正确的随机数。下面的 while 循环需要不断生成随机数,直到它们介于 1 和 45 之间(这是我在标准屏幕上的 y 轴限制)。我不知道我做错了什么,因为 while 循环条件对我来说看起来很好。问题是 while 循环开始无限运行。我没有做任何事情,只是在最后打印生成的数字,因为我只是想看到生成了正确的数字。谁能帮我解决这个问题吗?以下是我的 int main.
int main()
{
int r,c,x=0;
initscr();
raw();
keypad(stdscr, TRUE);
noecho();
//mvprintw(22,45,"<");
getmaxyx(stdscr,r,c);
int n,n2 = 0;
while((n<1)||(n>45)){
srand (time(NULL));
n = rand();
srand (time(NULL));
n2 = rand();
}
mvprintw(4,10,"First Random Number: %d\n", n);
mvprintw(5,10,"Second Random number: %d\n", n2);
getch();
endwin();
return 0;
}
在 C++ 中可以这样做:
#include <iostream>
#include <random>
int main()
{
std::random_device rd;
std::mt19937 gen( rd());
std::uniform_int_distribution<> dis( 1, 45);
for (int n=0; n<1000; ++n)
std::cout << dis(gen) << ' ';
std::cout << '\n';
}
Using rand() % x
这是一个有缺陷的设计,因为由于不均匀地划分范围而引入了偏差。你可以阅读this https://stackoverflow.com/a/24069874/1141471进一步了解由rand() % x
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)