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

C语言生成随机坐标给二维数组赋值时while循环无限运行如何解决

问题根源

你代码的核心问题是变量作用域冲突:
你在循环外先声明了外层的ranadom_num数组,while循环的判断条件用的是这个外层数组的值。但你在while循环内部又重新声明了一个同名的ranadom_num数组,这个是仅在循环内部生效的局部变量,每次循环生成的新坐标只会赋值给这个内部变量,外层数组的值永远不会被修改。如果第一次生成的坐标对应数组值不为0,循环条件会永远成立,直接进入死循环。

修复方案
  • 移除while循环内部的变量重复声明,直接给外层的ranadom_num数组赋值
  • 可选优化:增加数组空位判断逻辑,当数组全满时直接终止流程,避免无意义的循环尝试
修正后代码
srand(time(NULL));
// 可自行修正变量名拼写错误,原变量名ranadom为笔误,正确拼写为random
int random_num[2] = { rand() % 4, rand() % 4 };
while (array[random_num[0]][random_num[1]] != 0)
{
    // 直接修改外层数组,不要重复声明变量
    random_num[0] = rand() % 4;
    random_num[1] = rand() % 4;
}
array[random_num[0]][random_num[1]] = 2;

如果需要避免数组全满时的死循环,可新增空位统计逻辑:

// 先统计当前数组空位数量
int empty_count = 0;
for(int i = 0; i < 4; i++){
    for(int j = 0; j < 4; j++){
        if(array[i][j] == 0) empty_count++;
    }
}
// 没有空位直接退出,无需走随机逻辑
if(empty_count == 0){
    // 可在此处添加数组全满的提示逻辑
    return;
}
// 后续再执行原有随机赋值逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:06:04