我写了下面的代码来洗牌一副牌:
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)
这有什么不同?
我没有完全看你的逻辑,但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?
问题是,在你的
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>标题*中
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |