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
相关产品推荐
相关产品推荐

