我试图在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)
尽管C中的数组索引是从零开始的,但这并不意味着编译器会1在声明中添加每个维度.您的声明会生成一个51x1而不是52x2的数组.适用于52x2阵列
int deck[52][2];
Run Code Online (Sandbox Code Playgroud)
您当前的实现具有未定义的行为,这使得程序的输出不正确:访问deck[x][1]超出了数组的边界,产生了错误的输出.
| 归档时间: |
|
| 查看次数: |
2535 次 |
| 最近记录: |