Max66742 2024-02-05 20:38 采纳率: 28.6%
浏览 2
已结题

c语言初识关于rand()函数的问题

问一下关于三子棋游戏给电脑的随机下棋函数老是进入死循环能不求解一下
代码和运行图片如下

img

                      电脑走:                  >in  printl
 intx=0y=0
 X=randO%row;
 y = randQ %col;
 while1)
 人
           if      CboardLx]Ly]!=
                     continue:
                     board[x][y]=#
                     break;
                                                                                                                                          CSDN@Max66743

-

img

  • 写回答

2条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-02-05 20:40
    关注

    参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。

    在您提供的代码片段中,电脑下棋的部分存在一些问题,导致了死循环的发生。我将尝试根据您给出的信息还原并解析该部分的逻辑:

    int x = 0, y = 0;
    x = rand() % row; // 随机生成行坐标
    y = rand() % col; // 随机生成列坐标
    
    while (1) { // 进入无限循环
        if (board[x][y] != ' ') { // 如果当前位置已经有棋子
            continue; // 继续循环,重新选择坐标
        }
        else {
            board[x][y] = '#'; // 将当前位置设为电脑的棋子
            break; // 结束循环
        }
    }
    

    这段代码的问题在于,它没有确保计算机选择的是一个未被占用的位置,而是单纯地随机了一个坐标然后在循环中检查。如果这个位置已经被占用,则会一直 continue 而无法跳出循环。

    正确的实现应该是在循环内部不断生成新的随机坐标,直到找到一个空位为止。此外,为了避免死循环,在循环外生成随机数通常更好,如下所示:

    do {
        x = rand() % row;
        y = rand() % col;
    } while (board[x][y] != ' '); // 当随机到的位置为空时停止循环
    
    board[x][y] = '#'; // 将当前位置设为电脑的棋子
    

    这样,程序会在棋盘上找到一个空闲位置后才结束随机选择的过程,并放置电脑的棋子。同时,请确保在调用 rand() 函数之前已经使用 srand((unsigned int)time(NULL)); 初始化了随机数种子,以保证每次运行游戏时产生的随机数不同。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月13日
  • 已采纳回答 2月5日
  • 创建了问题 2月5日

悬赏问题

  • ¥30 关于#wireshark#的问题:需要网络应用流量数据集需要做长度序列的实验,需要与应用产生的会话的数据包的长度,如视频类或者聊天类软件
  • ¥15 根据上述描述表示泥浆密度沿着管路的长度方向在不断变化,如何来表示泥浆密度随管路的变化(标签-matlab|关键词-流计算)
  • ¥21 matlab可以把图像数据转换为小波分析吗
  • ¥60 基于香农编码的图像压缩算法实现
  • ¥15 matlabGUI绘制一个函数与其导数的图像
  • ¥20 大数据采集用Python爬取猫眼电影数据
  • ¥15 用freertos后NVIC里系统时钟部分报错
  • ¥15 后缀表达式的计算算法问题
  • ¥15 安装mid360驱动后,执行rviz_MID360.launch rviz不显示
  • ¥15 关于#人工智能#的问题:(2)设计一个GUI,允许语音和文本实现谣言的检测