在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(包括在内)
要获得从1
到limit
的数字,可以这样写:
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