我想制作一個程式,它生成2個隨機坐標,然后測驗我之前制作的二維陣列中的位置是否為空(陣列中的值為0)。如果為真,它會將值 2 放在該坐標上,否則它應該繼續尋找這樣的地方。問題是它在某些情況下會無限運行。
這是我制作的陣列:
int array[4][4] =
{
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0}
};
下面是代碼的其余部分:
srand(time(NULL));
int ranadom_num[2] = { rand() % 4, rand() % 4 };
while (array[ranadom_num[0]][ranadom_num[1]] != 0)
{
int ranadom_num[2] = { rand() % 4, rand() % 4 };
}
array[ranadom_num[0]][ranadom_num[1]] = 2;
有什么幫助嗎?:)
uj5u.com熱心網友回復:
給定的代碼中有兩個變數,
int ranadom_num[2] = { rand() % 4, rand() % 4 }; //here 1
while (array[ranadom_num[0]][ranadom_num[1]] != 0)
{
int ranadom_num[2] = { rand() % 4, rand() % 4 }; //here 2
}
因此,random_numpicked at1不會在回圈內更改,并且random_numat2沒有用,因為它在給定范圍內(即內部回圈)未使用。
在這里找到更新的代碼,
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int
main ()
{
int array[4][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{0, 0, 0, 0}
};
srand (time (NULL));
int ranadom_num[2] = { rand () % 4, rand () % 4 };
while (array[ranadom_num[0]][ranadom_num[1]] != 0)
{
printf ("%d ", array[ranadom_num[0]][ranadom_num[1]]);
ranadom_num[0] = rand () % 4;
ranadom_num[1] = rand () % 4;
}
array[ranadom_num[0]][ranadom_num[1]] = 2;
return 0;
}
您還需要注意里面的值array。至少有一個元素必須為零才能終止回圈,否則將是無限回圈。
uj5u.com熱心網友回復:
您ranadom_num在回圈中重新宣告,并且直到回圈完成后才在陣列中設定值,這就是您獲得無限回圈的原因。
srand(time(NULL));
int ranadom_num[2] = { rand() % 4, rand() % 4 };
while (array[ranadom_num[0]][ranadom_num[1]] != 0)
{
//now there's a chance that the array will have a 2 in it
array[ranadom_num[0]][ranadom_num[1]] = 2;
ranadom_num[0] = rand() % 4;
ranadom_num[1] = rand() % 4;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/346653.html
上一篇:將兩個陣列合二為一,不重復
下一篇:將兩個np.array壓縮成陣列
