C++ 填充随机数矩阵时循环提前退出仅生成3行问题咨询
问题原因
- 行列索引逻辑颠倒:你定义的数组
lust[lsy][lsx]中,lsy=10是行数,lsx=3是列数,外层循环变量i是行索引,内层循环变量l是列索引。你当前只对i=0/1/2这前三行的元素做了随机数赋值,剩下i=3~9共7行的元素未重新赋值,始终保持初始化的0值,因此看起来只有3行有效数据。 - 列范围判断逻辑错误:你需要的是每列有独立取值范围,应该判断列索引
l的取值,而非行索引i。比如l=0对应第一列用flx取余,l=1对应第二列用fly取余,l=2对应第三列用shpp取余,这样整列的取值规则统一。 - 原代码中未定义
flx、fly两个变量,仅声明了shpp=7,如果实际运行时未补充这两个变量的定义,会直接编译报错。
修正后的核心代码示例
// 补全缺失的变量定义,可根据需求调整取值 int flx = 10; int fly = 5; int lsx = 3; int lsy = 10; int lust[lsy][lsx]; int i = 0; int l = 0; int shpp = 7; // 初始化数组 for (i = 0; i < lsy; i++) { for (l = 0; l < lsx; l++) { lust[i][l] = 0; } } while (true) { // 生成随机数填充,按列设置范围 for (i = 0; i < lsy; i++) { for (l = 0; l < lsx; l++) { // 第一列 if (l == 0) { lust[i][l] = rand() % flx; } // 第二列 else if (l == 1) { lust[i][l] = rand() % fly; } // 第三列 else if (l == 2) { lust[i][l] = rand() % shpp; } cout << lust[i][l] << " "; } cout << "\nEndline reached! \n\n"; } // 打印完整数组 cout << "完整数组输出:\n"; for (i = 0; i < lsy; i++) { for (l = 0; l < lsx; l++) { cout << lust[i][l] << " "; } cout << "\n"; } // 可删除下面的break,或加延迟逻辑避免死循环输出过快 break; }
内容的提问来源于stack exchange,提问作者Ive
相关产品推荐
相关产品推荐

