【发布时间】:2014-10-10 14:09:56
【问题描述】:
我正在使用 ncurses 库来构建游戏。我无法生成正确的随机数。下面的 while 循环需要不断生成随机数,直到它们介于 1 到 45 之间(这是我在标准屏幕上的 y 轴限制)。我无法弄清楚我做错了什么,因为 while 循环条件对我来说看起来不错。问题是while循环开始无限运行。我什么也没做,只是在最后打印生成的数字,因为我只想看到生成了正确的数字。谁能帮我解决这个问题?以下是我的主要内容。
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;
}
【问题讨论】:
-
首先,不要多次调用
srand,这样会得到很差的结果。其次,你为什么只调用普通的rand()而不是(rand()%45)+1之类的东西? -
rand()有很多问题,你可能会觉得这个lesinskis.com/code_repair_01_rand_problems.html 很有趣。 -
C 还是 C++?答案会千差万别。
-
哦,是的.. 没有使用 srand 2 次。虽然它没有任何区别。我现在只是想得到一个合理的输出。我在改善 rand 结果方面没有做太多工作。但是是的,你是对的,这样做会改善 rand 结果。但是,现在我似乎无法跳出循环并显示结果。对此有什么想法吗?