You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言Hangman游戏通关第10关后程序冻结问题排查

Hangman游戏第10关通关后冻结的原因分析

核心问题:共享索引标记数组引发无限死循环

你的程序中,usedIndices数组被同时用于标记guessWords和guessWords2两个词库的索引是否已使用。每一轮关卡(即外层for循环的一次迭代)会从两个词库各选取一个随机索引,并将这两个索引在usedIndices中标记为1(已使用)。

由于每个词库仅有20个元素(索引范围0-19),每关会消耗2个不同的索引。当运行到第10关时,0-19范围内的所有索引都已被标记为已使用。此时进入下一轮关卡的do-while循环:

do {
    randomIndex=rand() % 20;
} while (usedIndices[randomIndex]);

rand()%20只能生成0-19的数字,但这些位置的usedIndices值全为1,循环条件永远成立,程序陷入无限死循环,最终表现为冻结。

修复方案

将共享的usedIndices拆分为两个独立的数组,分别对应两个词库的索引标记:

// 替换原有的usedIndices数组
int usedIndices1[20] = {0}; // 专门标记guessWords的已用索引
int usedIndices2[20] = {0}; // 专门标记guessWords2的已用索引

随后在生成随机索引时,分别使用对应的标记数组:

// 生成guessWords的随机索引
do {
    randomIndex=rand() % 20;
} while (usedIndices1[randomIndex]);
usedIndices1[randomIndex]=1;

// 生成guessWords2的随机索引
do {
    randomIndex2=rand() % 20;
} while (usedIndices2[randomIndex2]);
usedIndices2[randomIndex2]=1;

这样两个词库的索引标记互不干扰,每关仅消耗各自词库的一个索引,20关都能正常生成新的随机词汇,避免死循环。

内容的提问来源于stack exchange,提问作者skay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:27:06