请不要尝试修改代码。这段代码很好用。我从一本书中读取它。我只需要一些帮助来理解代码的行为。
#include <iostream>
#include <ctime>
using namespace std;
void suffle2(int[][13]);
int main(){
int deck[4][13] = { 0 };
srand(time(0));
suffle2(deck);
return 0;
}
void suffle2(int d[4][13])
{
int row, column;
for (int card = 1; card <= 20; card++)
{
do{
row = rand() % 4;
column = rand() % 13;
cout << "d[" << row << "]" << "[" << column << "]" << "=" << d[row][column]<<endl;
} while (d[row][column] != 0);
d[row][column] = card;
cout << "d[" << row << "]" << "[" << column << "]" << "=" << d[row][column] <<endl;
}
}
cout << "d[" << row << "]" << "[" << column << "]" << "=" << d[row][column] <<endl;
我编码了解行为。我的问题是:
deck [4] [13]已经初始化为0.因此,while循环不应该工作,因为它应该始终
找到d [row] [column] == 0但它不是..它工作正常。
第二个问题是,假设输出如下:
d[0][4]=0
d[0][4]=1
d[2][4]=0
d[2][4]=2
d[1][12]=0
d[1][12]=3--------duplicate
d[3][11]=0
d[3][11]=4
d[0][6]=0
d[0][6]=5
d[1][12]=3--------duplicate
d[1][11]=0
d[1][11]=6
d[0][7]=0
d[0][7]=7<--------------------duplicate
d[1][6]=0
d[1][6]=8
d[0][6]=5
d[0][11]=0
d[0][11]=9
d[2][11]=0
d[2][11]=10
d[3][11]=4
d[3][2]=0
d[3][2]=11
d[2][11]=10
d[1][10]=0
d[1][10]=12
d[1][6]=8
d[0][9]=0
d[0][9]=13
d[0][1]=0
d[0][1]=14
d[3][4]=0
d[3][4]=15
d[0][7]=7 <---------------------duplicate
d[0][2]=0
d[0][2]=16
d[0][3]=0
d[0][3]=17
d[2][11]=10
d[0][5]=0
d[0][5]=18
d[0][9]=13
d[0][10]=0
d[0][10]=19
d[1][6]=8
d[1][7]=0
d[1][7]=20
Press any key to continue . . .
在for循环中,卡值是增量的,但是当找到相同的数组索引的重复卡值时,它会取该索引的第一个值。为什么它不改变增量值?请帮帮我理解代码。
答案 0 :(得分:0)
你说得对,甲板的所有值在开头都是0并且循环起作用,因为do{}while(condition);
在检查condition
之前至少执行了一次。循环在这里寻找第一张未初始化的卡片。
重复输出正是循环当前正在检查的内容,它找到一张初始化的卡片,因此它一直在寻找未初始化的卡片(这是第一个cout)。