我正在尝试创建一个2d矩阵板,其中一侧由用户输入决定。我创建了两个D数组,但它没有打印正确的数字。例如,如果用户输入3,则假设创建一个3 * 3的电路板,其编号为8,7,6,5,4,3,2,1,0。
然而,它在每行中保持相同的数字,例如876,876,876
我知道它正在做我写的但我无法弄清楚如何纠正它...我想我需要一个重置为零的计数器,也许[i] [j] =计数器的值。< / p>
无论如何,这里是给出麻烦的代码。
for (i =0; i< row; i++)
{
for (j =0; j < col; j++)
{
game [i][j] = ((row * row)-1) - j;
printf( "%i", game[i][j] );
}
如何填充电路板,使其从(行* col)-1打印到零。万分感谢。
答案 0 :(得分:0)
for ((i=0, k=0); i< row; i++)
{
for (j =0; j < col; j++)
{
game [i][j] = ((row * col)-1) - (k++);
printf( "%i", game[i][j] );
}
}
代码中的基本错误是,在每次迭代中,从游戏[i] [j]中减去的值被重新初始化为0.因为,(row * col)的值是常量的给定两者的值,每次从总和中减去(0,1,2)导致相同数字的再现。
如示例中所示,row = 3,col = 3,因此3 * 3 = 9(从0到8的索引)。
所以,我们这样做:
8 - 0 = 8
8 - 1 = 7
8 - 2 = 6
再次j重新初始化为0,所以我们再次,
8 - 0 = 8
8 - 1 = 7
8 - 2 = 6
解决方法是,减去的值应该统一减少,这样它就不会在循环中重新初始化。
结果:
8 - 0 = 8
8 - 1 = 7
8 - 2 = 6
8 - 3 = 5
.
.
.
.
8 - 8 = 0.
希望这能解决问题。
答案 1 :(得分:0)
正如“self”所暗示的,使用第三个变量是最简单的方法(实际上效率最高:每次迭代只减少一次)
int count = row * col - 1;
for (size_t i =0; i< row; i++)
{
for (size_t j =0; j < col; j++)
{
game [i][j] = count--;
printf( "%i", game[i][j] );
}
}
输出: 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0