需要帮助来详细了解do while循环

时间:2014-07-09 08:43:02

标签: c++

请不要尝试修改代码。这段代码很好用。我从一本书中读取它。我只需要一些帮助来理解代码的行为。

#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循环中,卡值是增量的,但是当找到相同的数组索引的重复卡值时,它会取该索引的第一个值。为什么它不改变增量值?请帮帮我理解代码。

1 个答案:

答案 0 :(得分:0)

你说得对,甲板的所有值在开头都是0并且循环起作用,因为do{}while(condition);在检查condition之前至少执行了一次。循环在这里寻找第一张未初始化的卡片。

重复输出正是循环当前正在检查的内容,它找到一张初始化的卡片,因此它一直在寻找未初始化的卡片(这是第一个cout)。