= 怎样用 srand和rand 函数生成[30,80]的数呢? =
-
- 帖子: 177
- 注册时间: 2007-01-25 13:04
-
- 帖子: 353
- 注册时间: 2007-04-03 9:52
- 联系:
-
- 帖子: 177
- 注册时间: 2007-01-25 13:04
大哥给看看这段代码那里错了.
代码: 全选
#include<curses.h>
#include<stdio.h>
#include<stdlib.h>
int
main ()
{
char b;
int c;
initscr ();
if (!hsa_colors () || start_cplor () == ERR)
{
endwin ();
printf ("ERROR_DISABLE_COLOR\n");
exit (1);
}
init_pair (1, COLOR_GREEN, COLOR_BLACK);
init_pair (2, COLOR_RED, COLOR_BLACK);
for (;;)
{
attron (COLOR_PAIR (1));
srand ((int) time (0));
c = 97 + (int) (26.0 * (rand () / (RAND_MAX + 1.0)));
printw ("%c\n", c);
refresh ();
b = getch ();
refresh ();
if (c != b)
{
if (b == 27)
{
endwin ();
exit (0);
}
else
{
attron (COLOR_PAIR (2));
printw ("ERROR\n");
refresh ();
}
}
}
return 0;
}
-
- 帖子: 353
- 注册时间: 2007-04-03 9:52
- 联系:
帮你改了
2处拼写错误, 少1个头文件
下次记得把编译命令行和错误提示一起给出来
命令行参数
在Linux上编译Curses程序时,gcc要带 -lcurses参数,(这个是在IBM的网站上搜出来的)
我没用过curses,不知有什么书可以参考?
2处拼写错误, 少1个头文件
下次记得把编译命令行和错误提示一起给出来
代码: 全选
#include<curses.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main ()
{
char b;
int c;
initscr ();
if ( !has_colors () || start_color () == ERR )
{
endwin ();
printf ( "ERROR_DISABLE_COLOR\n" );
exit ( 1 );
}
init_pair ( 1, COLOR_GREEN, COLOR_BLACK );
init_pair ( 2, COLOR_RED, COLOR_BLACK );
for ( ;; )
{
attron ( COLOR_PAIR ( 1 ) );
srand ( ( int ) time ( 0 ) );
c = 97 + ( int ) ( 26.0 * ( rand () / ( RAND_MAX + 1.0 ) ) );
printw ( "%c\n", c );
refresh ();
b = getch ();
refresh ();
if ( c != b )
{
if ( b == 27 )
{
endwin ();
exit ( 0 );
}
else
{
attron ( COLOR_PAIR ( 2 ) );
printw ( "ERROR\n" );
refresh ();
}
}
}
return 0;
}
在Linux上编译Curses程序时,gcc要带 -lcurses参数,(这个是在IBM的网站上搜出来的)
我没用过curses,不知有什么书可以参考?
- efan
- 帖子: 238
- 注册时间: 2006-09-14 21:59
- 来自: 广东
- 联系:
- laborer
- 帖子: 1016
- 注册时间: 2005-10-25 11:15
- 联系:
这样会导致随机数的概率不一致,特别是B-A大的时候,问题会比较明显。man srand有提到的。efan 写了:用得着这么麻烦吗……产生[A,B)之间的随机数,用
rand () % (B - A + 1) + A
就行了,没必要先转成[0,1)的
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser
-
- 帖子: 353
- 注册时间: 2007-04-03 9:52
- 联系:
确实可以不用这么麻烦,完全可以用你说的这种方法,更可以自己写一个,efan 写了:用得着这么麻烦吗……产生[A,B)之间的随机数,用antonym55 写了: j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));
rand () % (B - A + 1) + A
就行了,没必要先转成[0,1)的
只不过 即然 The Art of Scientific Computing 中建议了
而且写到man手册中,还是用这个比较好点吧!
"If you want to generate a random integer between 1 and 10, you
should always do it by using high-order bits, as in
j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));
and never by anything resembling
j = 1 + (rand() % 10);
(which uses lower-order bits)."
-
- 帖子: 353
- 注册时间: 2007-04-03 9:52
- 联系:
-
- 帖子: 177
- 注册时间: 2007-01-25 13:04
后来我自己意识到少了time.h的头文件了.antonym55 写了:帮你改了
2处拼写错误, 少1个头文件
下次记得把编译命令行和错误提示一起给出来
命令行参数代码: 全选
#include<curses.h> #include<stdio.h> #include<stdlib.h> #include<time.h> int main () { char b; int c; initscr (); if ( !has_colors () || start_color () == ERR ) { endwin (); printf ( "ERROR_DISABLE_COLOR\n" ); exit ( 1 ); } init_pair ( 1, COLOR_GREEN, COLOR_BLACK ); init_pair ( 2, COLOR_RED, COLOR_BLACK ); for ( ;; ) { attron ( COLOR_PAIR ( 1 ) ); srand ( ( int ) time ( 0 ) ); c = 97 + ( int ) ( 26.0 * ( rand () / ( RAND_MAX + 1.0 ) ) ); printw ( "%c\n", c ); refresh (); b = getch (); refresh (); if ( c != b ) { if ( b == 27 ) { endwin (); exit ( 0 ); } else { attron ( COLOR_PAIR ( 2 ) ); printw ( "ERROR\n" ); refresh (); } } } return 0; }
在Linux上编译Curses程序时,gcc要带 -lcurses参数,(这个是在IBM的网站上搜出来的)
我没用过curses,不知有什么书可以参考?
谢谢你.