C语言:rand()函数每次运行的数字都一样解决办法

目录

第一种办法: 新增头文件,改用C++运行

第二种办法:使用srand()函数,使程序每次运行时产生不同的随机数序列,序列里第一个数肯定是不同的,那计算机拿的数就不同

第三种办法:使用time()函数读取计算机的时钟值,把该值设置为随机数种子。


试了好久,下面分享三种办法。

原代码:

#include <stdio.h>
#include <stdlib.h> //rand()在头文件stdlib.h定义,所以要包含
int main()
{
    int magic, flag=1,i;  
    int guess;
    magic= rand() %100 + 1;  //调用随机函数,让计算机想0-100范围内的数
    printf("%d\n",magic);   
    for (i=1;flag> 0;i++)
    {
        printf("input guess number:");  
        scanf("%d",&guess);  
        if (guess> magic)
        {
            printf("too big!\n");
            
        }
        else if (guess< magic)
        {
            printf("too small!\n");
        }
        else
        {
            printf("right!\n");
            flag= 0;  //猜对了就改掉flag的值,使它不符合循环条件
        }
    }
}
 

运行好几次,出来的变量magic都是同一个数。

第一种办法: 新增头文件,改用C++运行

#include <stdio.h>
#include <stdlib.h> 
#include <time.h>   //新增
#include <conio.h>  //新增
#include <iostream> //新增
using namespace std; //新增
int main()

{
    int magic, flag=1,i;
    int guess;
    srand((unsigned)time(NULL)); //新增
    magic= rand() %100 + 1;  
    printf("%d\n",magic);   
    for (i=1;flag> 0;i++)
    {
        printf("input guess number:");  
        scanf("%d",&guess); 
        if (guess> magic)
        {
            printf("too big!\n");
            
        }
        else if (guess< magic)
        {
            printf("too small!\n");
        }
        else
        {
            printf("right!\n");
            flag= 0;  //猜对了就改掉flag的值,使它不符合循环条件
        }
    }
}

这样每次运行的magic都会不同。其中iosream头文件必须要用C++运行,还用C语言运行会报错,如下。

第二种办法:使用srand()函数,使程序每次运行时产生不同的随机数序列,序列里第一个数肯定是不同的,那计算机拿的数就不同

代码

#include <stdio.h>
#include <stdlib.h> //rand()在头文件stdlib.h定义,所以要包含
int main()
{
    int magic, flag=1,i;  
    int guess;
    unsigned int seed; //定义一个无符号整型变量
    printf("input seed number:"); //提示输入
    scanf("%u",&seed); //输入srand()函数需要的参数
    srand(seed);       //为rand()函数设置随机数种子
    magic= rand() %100 + 1;  //调用随机函数,让计算机想0-100范围内的数
    printf("%d\n",magic);   
    for (i=1;flag> 0;i++)
    {
        printf("input guess number:");  
        scanf("%d",&guess);  
        if (guess> magic)
        {
            printf("too big!\n");
            
        }
        else if (guess< magic)
        {
            printf("too small!\n");
        }
        else
        {
            printf("right!\n");
            printf("一共猜了%d次",i);
            flag= 0;  //猜对了就改掉flag的值,使它不符合循环条件
            
        }
    }
}
 

第三种办法:使用time()函数读取计算机的时钟值,把该值设置为随机数种子。

代码

#include <stdio.h>
#include <stdlib.h> 
#include <time.h>   //添加头文件
int main()
{
    int magic, flag=1,i;  
    int guess;
    srand(time(NULL)); //使用time()函数读取计算机的时钟值

    magic= rand() %100 + 1;  //调用随机函数,让计算机想0-100范围内的数
    printf("%d\n",magic);   
    for (i=1;flag> 0;i++)
    {
        printf("input guess number:");  
        scanf("%d",&guess);  
        if (guess> magic)
        {
            printf("too big!\n");
            
        }
        else if (guess< magic)
        {
            printf("too small!\n");
        }
        else
        {
            printf("right!\n");
            printf("一共猜了%d次",i);
            flag= 0;  //猜对了就改掉flag的值,使它不符合循环条件
            
        }
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值