如果没有嵌套的do-while,循环不能按预期运行

Avi*_*mar 0 c++

我写了下面的代码来洗牌一副牌:

int i,j;  
for(int x=1;x<53;x++) {
   i=rand()%4;  
   j=rand()%13;  
   if(deck[i][j]=0)  
       deck[i][j]=x;
   else
       x--;
}  
Run Code Online (Sandbox Code Playgroud)

这没有产生任何结果,而以下代码产生了结果:

int i,j;  
for(int x=1;x<53;x++) {
    do {
        i=rand()%4;  
        j=rand()%13;
    } while(deck[i][j]!=0);  
    deck[i][j]=x   
}  
Run Code Online (Sandbox Code Playgroud)

这有什么不同?

NG.*_*NG. 7

我没有完全看你的逻辑,但if(deck[i][j]=0)闻起来像一个问题.你的意思是if(deck[i][j]==0)

编辑现在看着它,我不确定你是如何得到你的答案的.底部循环是选择一个随机的i和j值,并确保它deck[i][j]是0(或我猜的是NULL).当它为[i] [j]找到NULL值时,它会为此分配x.

在你的循环中,如果deck [i] [j]不为null,则递减x(假设你的意思==是我认为你做了).底部循环不会触及身体内部的任何位置 - 仅在for条件下.你为什么决定递减x?


Arm*_*yan 5

问题是,在你的

if(deck[i][j]=0)  
Run Code Online (Sandbox Code Playgroud)

你使用=而你必须使用==

赋值运算符(=)的结果是对赋值对象的引用,在这种情况下,它是deck[i][j]您刚刚设置为0 的引用.因此,它就像您写的if(0)if(false).这就是你的if代码永远不会执行的原因.心连心

*作为旁注,请注意在C++中我们有std :: random_shuffle函数,它位于<algorithm>标题*中