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

Need Help to understand the do while loop in details

本文关键字:do while 循环 帮助      更新时间:2023-10-16

请勿尝试修改代码。这段代码运行良好。我从一本书里拿的。我只是需要一些帮助来理解代码的行为。

#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循环不应该起作用,因为它应该一直起作用查找[行][列]== 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循环中,卡片值是递增的,但是当在数组的相同索引中找到重复的卡片值时,它将取该索引的第一个值。为什么它不改变增量值?请帮助我理解代码

你是对的,deck的所有值在开始时都是0,循环工作是因为do{}while(condition);在检查condition之前至少执行一次。循环在这里寻找第一张未初始化的卡片。

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