您的位置:首页 > 编程语言 > C语言/C++

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’,循环结束
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息