C++如何从数组中随机选取一个字符?
C语言实现石头剪刀布电脑随机出拳功能
实现思路
你已经定义好了存储出拳字符的数组,只需要生成0~2范围的随机整数作为数组下标,就能取到对应的随机出拳字符,具体步骤如下:
步骤1:引入必要头文件
需要用到随机数和时间相关的系统函数,在代码顶部引入两个头文件:
#include <stdlib.h> #include <time.h>
步骤2:初始化随机数种子
在程序启动/游戏开始的位置仅执行一次种子初始化,不要放在每轮出拳的循环里,否则会出现多次出拳结果相同的问题:
// 用当前时间作为随机数种子,保证每次运行游戏的出拳序列都不同 srand((unsigned int)time(NULL));
步骤3:每轮生成随机出拳
需要电脑出拳的位置,直接用rand()生成随机数取模3得到下标,访问数组即可:
// 每轮调用即可得到随机的'r'/'p'/'s' char computer_choice = random_array[rand() % 3];
完整可运行示例
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { char random_array[3] = {'r', 'p', 's'}; // 初始化随机数种子,仅执行一次 srand((unsigned int)time(NULL)); // 示例:连续测试5轮出拳 for(int i=0; i<5; i++) { char choice = random_array[rand() % 3]; printf("第%d轮电脑出拳:%c\n", i+1, choice); } return 0; }
注意事项
- 普通游戏场景下
rand() % 3的随机分布完全够用,如果对随机性要求极高,可以替换为更严谨的随机数生成方式,避免取模带来的轻微分布偏差问题。 - 随机数种子
srand()全局只需要调用一次,重复调用会导致随机结果重复。
内容的提问来源于stack exchange,提问作者Saadat khurshid Kitab
相关产品推荐
相关产品推荐

