在C中创建卡片组

Aro*_*ron 1 c arrays

我试图在C中创建一副牌.我想要实现这个的方法是通过一个2维数组deck[51][1],每个将有52个插槽,每个插槽2个.第一个插槽将包含卡值(1-52),第二个插槽将包含套装(1-4).

我尝试使用以下代码分配:

int deck[51][1];
int i;
int j;
int suit = 1;

int main()
{
    for(i=0; i<52; i++){
        for(j=0; j<2; j++){
            if(j==0){
                deck[i][j] = i+1;
            } else {
                deck[i][j] = suit % 4;
            }
            suit++;
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用以下双循环打印出每张卡的值:

for(i=0; i<52; i++){
    for(j=0; j<2; j++){
        printf("%i ",deck[i][j]);
    }
    printf("\n");
}

return 0;
Run Code Online (Sandbox Code Playgroud)

}

然而,它不是导致52行的卡片值,而是它的套装,它只是显示一个奇怪的

1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
Run Code Online (Sandbox Code Playgroud)

等等,直到

51 52
52 0
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚为什么它没有将suit % 4值分配给每个数组的第二项,这应该导致整洁

1 1
2 2
3 3
4 4
5 1
6 2
7 3
8 4
Run Code Online (Sandbox Code Playgroud)

das*_*ght 5

尽管C中的数组索引是从零开始的,但这并不意味着编译器会1在声明中添加每个维度.您的声明会生成一个51x1而不是52x2的数组.适用于52x2阵列

int deck[52][2];
Run Code Online (Sandbox Code Playgroud)

您当前的实现具有未定义的行为,这使得程序的输出不正确:访问deck[x][1]超出了数组的边界,产生了错误的输出.