C语言产生随机数
2016-11-23 15:15
204 查看
C语言产生随机数
在stdlib.h(标准库)中产生的函数rand()产生的是伪随机数#include <stdio.h> #include <stdlib.h> int main() { int i; for (i=0; i<10; i++) { printf("%d\n", rand()); } return 0; }
产生真正的随机数
srand() 为rand()设置随机数种子, 使产生的随机数“随机化”
#include <stdio.h> #include <stdlib.h> int main() { int i; unsigned int seed; printf("Please enter seed:"); scanf("%u", &seed); srand(seed); for (i=0; i<10; i++) { printf("%d\n", rand()); } return 0; }
但是这样需要输入种子!
改用系统时间作为随机数种子更好
用函数time()获得系统时间
两种方法——函数参数,函数返回值
用NULL作为函数参数,使其仅能从返回值 取得系统时间,便于将函数写到表达式中,需要用到time.h文件
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int i; srand(time(NULL)); for (i=0; i<10; i++) { printf("%d\n", rand()); } return 0; }
scanf函数返回成功读入的数据项数,读到文件末尾出错时则返回EOF。
scanf(“%d”,&a);
scanf()按指定格式读取 缓冲区中的数据,若读取 失败,则缓冲区中的非数 字字符不会被读走,因不 等而一直处于判断、读取、 判断、读取、…(死机)
#include <time.h> #include <stdlib.h> #include <stdio.h> main() { int magic, guess, counter = 0, ret; char reply; srand(time(NULL)); do{ counter = 0; magic = rand() % 100 + 1; do{ printf("Please guess a magic number:"); ret = scanf("%d", &guess); while (ret != 1) { while (getchar() != '\n'); printf("Please guess a magic number:"); ret = scanf("%d", &guess); } counter++; if (guess > magic) printf("Wrong!Too big!\n"); else if (guess < magic) printf("Wrong!Too small!\n"); else printf("Right!\n"); } while (guess!=magic && counter<10); printf("counter = %d\n", counter); printf("Do you want to continue(Y/N or y/n)?"); scanf(" %c", &reply); }while (reply=='Y' || reply=='y'); }
清除缓冲区中的残留数据,然后重新输入
while (getchar() != '\n');
相当于
while(getchar() != '\n') { ;//空语句 }
由于输入的数据都是保存在输入缓存区,直到键入'\n'才去读取走数据。
放入缓冲区最后一个字符是’\n’,利用getchar()把该字符读取走。
这句话还可以理解为,不断读取缓冲区数据,直到读出’\n’,循环结束