我在C中有一个项目,我需要找到一种方法将0放在2d数组的10个随机位置,比方说pinakas[3][10]
。让我提供一些代码来更好地解释自己:
int main(int argc, char *argv[]) {
int i,j,x,y;
int pinakas[3][10];
for (i=0;i<3;i++)
{
for(j=0;j<10;j++)
{
pinakas[i][j]=1;
}
}
for (i=0;i<10;i++)
{ do
{
int x=rand()%2;
int y=rand()%9;
}
while (pinakas[x][y]=0);
pinakas[x][y]=0;
}
for (i=0;i<3;i++)
{
for(j=0;j<10;j++)
{
printf("%d\n",pinakas[i][j]);
}
}
return 0;
}
首先我将数据放在数组的每个位置,然后我试图找到一种方法将零放在数组的10个随机位置。非常感谢。
答案 0 :(得分:3)
部分
do
{
int x=rand()%2;
int y=rand()%9;
}
while (pinakas[x][y]=0);
将给出一个错误,因为x和y在锁中声明,并且在块外不会被识别。尝试:
int x, y;
do
{
x=rand()%3;
y=rand()%10;
}
while (pinakas[x][y]==0);
另请注意使用==
,即comparisson,只需=
即可。
最后,要将0放在数组的10个随机位置,你应该/可以这样做:
int x, y, i=0;
do
{
x=rand()%3;
y=rand()%10;
if (pinakas[x][y]!=0) {
pinakas[x][y]= 0;
i++;
}
}
while (i<10);
编辑:当你抱怨你只得到7个零(这是不可能的)时,按照完整的代码进行复制和粘贴:
int main(int argc, char *argv[])
{
int i,j,x,y;
int pinakas[3][10];
for (i=0;i<3;i++)
{
for(j=0;j<10;j++)
{
pinakas[i][j]=1;
}
}
i=0;
do
{
x=rand()%3;
y=rand()%10;
if (pinakas[x][y]!=0) {
pinakas[x][y]= 0;
i++;
}
}
while (i<10);
x=0;
for (i=0;i<3;i++)
{
for(j=0;j<10;j++)
{
printf("[%d,%d] = %d\n",i,j,pinakas[i][j]);
if (pinakas[i][j]==0) x++;
}
}
printf ("%d zeroes\n",x);
return 0;
}
在我的系统上打印10。
答案 1 :(得分:0)
我已就你所犯的错误发表评论
for (i=0;i<10;i++){
do{
int x=rand()%2; //should be % 3
int y=rand()%9; //should be % 10
} while (pinakas[x][y]=0); //you need double equals for comparison
pinakas[x][y]=0; //x an y are out of scope here
}