簡體   English   中英

創建2D陣列板

[英]Creating a 2D array board

我正在嘗試創建一個二維矩陣板,哪一側由用戶輸入確定。 我創建了兩個D數組,但是沒有打印正確的數字。 例如,如果用戶輸入3,則假設創建一個3 * 3板,其數字為8、7、6、5、4、3、2、1、0。

但是,它會繼續在每行中打印相同的數字,例如876、876、876

我知道它正在執行我寫的操作,但是我想不出如何糾正它...我在想我需要一個重置為零的計數器,也許[i] [j] =計數器的值。

無論如何,這里是給麻煩的代碼。

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到零打印。 太感謝了。

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] ); 
    }
}

代碼中的基本錯誤是,在每次迭代中,從game [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.

希望這可以解決問題。

正如“自我”所建議的那樣,使用第三個變量是最簡單的方法(實際上是最有效的:每次迭代僅遞減一個)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM