创建2D阵列板

时间:2014-04-19 18:22:35

标签: c arrays 2d

我正在尝试创建一个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打印到零。万分感谢。

2 个答案:

答案 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