2015-10-17 62 views
2

當我試圖生成一個隨機數從0到intÇ - 蘭特()模0

//Populate Currently Allocated Reasource for each customer 
for (i = 0; i < NUMBER_OF_CUSTOMERS; i++) 
{ 
    printf("%d:[ ",i); 
    for (j = 0; j < NUMBER_OF_RESOURCES; j++) 
    { 
     allocation[i][j] = rand() % maximum[i][j]; 
     printf("%d ",allocation[i][j]); 
    } 
    printf("] \n\n"); 
} 

我得到一個浮點異常時maximum[i][j]爲0

有沒有更好的方法創建一個沒有floating point error引起的rand() % 0的隨機數?

編輯: 最大時爲0,隨機數輸出應該只是0

+3

請你rmath,老師爲什麼除以0是不確定的。 – Olaf

+0

是'int'或'float'的'allocate [] []'和maximum [] []'數組嗎? –

回答

0

你說:

最大時爲0 ,隨機數輸出應該只是0.

您可以添加支票來照顧這一點。

if (maximum[i][j] == 0) 
{ 
    allocation[i][j] = 0; 
} 
else 
{ 
    allocation[i][j] = rand() % maximum[i][j]; 
} 
1

嘗試使用此代替

//Populate Currently Allocated Reasource for each customer 
for (i = 0; i < NUMBER_OF_CUSTOMERS; i++) 
{ 
    printf("%d:[ ",i); 
    for (j = 0; j < NUMBER_OF_RESOURCES; j++) 
    { 
     allocation[i][j] = maximum[i][j] ? (rand() % maximum[i][j]) : 0; 
     printf("%d ",allocation[i][j]); 
    } 
    printf("] \n\n"); 
} 
+0

這種格式稱爲什麼?我在哪裏可以找到有關其用途的文檔? – Sean

+0

我的意思是,如果'maximum [i] [j]'不是0,而不是將[rand()%maximum [i] [j])賦給'allocation [i] [j]',否則將0賦給'allocation [i] [j]' – Mykola

+2

@Sean,尋找三元運營商 – Leeor

0

可以使用?:操作員整齊地編寫額外的條件:

allocation[i][j] = maximum[i][j] ? (rand() % maximum[i][j]) : 0; 

條件表達式如果條件是真的嗎?然後值X:否則Y值


在計算機程序設計:是三元操作符是在幾種編程語言的語法基本條件表達式的一部分。它通常被稱爲條件運算符,inline if(iif)或ternary if。

Wikipedia

+0

downvote的原因是什麼? – nikaltipar

2

a % b給你,其餘時候ab分。因此,它總會給你一個小於b的結果,並且當b爲零時它不起作用,因爲你不能被零除。

如果你想要一個介於0和x之間的隨機數,你需要採取rand() % (x + 1)

+0

如果最大值爲負值會怎麼樣? – nikaltipar

+0

@naltipar然後事情變得怪異。具有負數的模運算符的行爲是實現定義的。 http://stackoverflow.com/questions/7594508/modulo-operator-with-negative-values – duskwuff

0

當最大值爲0,隨機數輸出應該只爲0

模運算符是一個除法後的餘數。由於零除以不明確,因此模0也是如此。

您需要一個條件來防止嘗試除以零。您可以使用if/else語句或ternary operator?:)來完成此操作。換句話說,將此更改爲

allocation[i][j] = rand() % maximum[i][j]; 

以下之一。

if (maximum[i][j] == 0) 
{ 
    allocation[i][j] = 0; 
} 
else 
{ 
    allocation[i][j] = (rand() % maximum[i][j]); 
} 

allocation[i][j] = (maximum[i][j] == 0) ? (rand() % maximum[i][j]) : 0; 
+0

當然,無論好壞,條件'(最大[i] [j] == 0)'可以進一步縮短由於'最大[i] [j]',因爲0在C中評價爲假。但我認爲明確的條件更清楚。 –