易百教程

生成伪随机整数

stdlib.h头文件中声明的rand()函数返回随机数。

int chosen = 0;
chosen = rand();  // 设置为随机整数

每次调用rand()函数时,它都会返回一个随机整数。该值将从零到最大值RAND_MAX,其值在stdlib.h中定义。由rand()函数生成的整数被描述为伪随机数。rand()函数生成的数字序列使用起始种子数。对于给定的种子,序列将始终相同。

要在每次运行程序时获得不同的伪随机数序列,可以使用以下语句:

srand(time(NULL));    // 使用时钟值作为起始种子
int chosen = 0;
chosen = rand();     // 设置为0到RAND_MAX的随机整数

只需要在程序中调用一次srand()来初始化序列。每次调用rand()时,都会得到另一个伪随机数。要获取范围内的值,可使用以下代码:

srand(time(NULL));                // 使用时钟值作为起始种子
int limit = 20;                   // 伪随机值的上限
int chosen = 0;
chosen = rand() % limit;          // 0 到 limit-1(包括在内)

要获得从1limit的数字,可以这样写:

chosen = 1 + rand() % limit;      // 0 到 limit-1(包括在内)

以下代码显示了如何让用户猜出一个随机数。

示例代码

#include <stdio.h>
#include <stdlib.h>               // For rand() and srand()
#include <time.h>                 // For time() function

int main(void)
{
  int chosen = 0;                 // The lucky number
  int guess = 0;                  // Stores a guess
  int count = 3;                  // The maximum number of tries
  int limit = 20;                 // Upper limit for pseudo-random values

  srand(time(NULL));              // Use clock value as starting seed
  chosen = 1 + rand() % limit;    // Random int 1 to limit

  printf("\n这是一个猜数字游戏.");
  printf("\n系统已经选择了1到20之间的数字"
    " 现在您来猜一猜.\n");

  for (; count > 0; --count)
  {
    printf("\n还有 %d 次机会.", count);
    printf("\n输入一个猜测数值: ");  // Prompt for a guess
    scanf("%d", &guess);          // Read in a guess
                    // Check for a correct guess
    if (guess == chosen)
    {
      printf("\n恭喜,你猜对了!\n");
      return 0;                       // End the program
    }
    else if (guess < 1 || guess > 20)  // Check for an invalid guess
      printf("这个数字只在1到20之间.\n ");
    else
      printf("对不起, %d 不正确. 当前值 %s 您收入的值.\n",
        guess, chosen > guess ? "大于" : "小于");
  }
  printf("\n您有三次机会,但是都猜错了。 这个数字是 %ld\n",
    chosen);
  return 0;
}

编译并执行上面示例代码,得到以下结果:

hema@ubuntu:~/book$ ./main

这是一个猜数字游戏.
系统已经选择了1到20之间的数字 现在您来猜一猜.

还有 3 次机会.
输入一个猜测数值: 5
对不起, 5 不正确. 当前值 大于 您收入的值.

还有 2 次机会.
输入一个猜测数值: 7
对不起, 7 不正确. 当前值 大于 您收入的值.

还有 1 次机会.
输入一个猜测数值: 8
对不起, 8 不正确. 当前值 大于 您收入的值.

您有三次机会,但是都猜错了。 这个数字是 19