2015-11-06 160 views
1

我傳遞的三個數字到我的程序改變的值,可以說6 2 8我已經功能,在這些數字的間隔產生的隨機數,例如指針變量

1 number = 0<= number <=6 
2 number = 0<= number <=2 
3 number = 0<= number <=8 

我已經宣佈的功能爲它工作正常

double random(int a) 
{ 
    srand((unsigned int)time(NULL)); 

    double rnd = (((double)rand()/(double)(RAND_MAX)) * a); 
    return rnd; 
} 

的話,我已經最終數目可以說10 什麼,我試圖做的,是隨機的,前兩個數字=的間隔從

生成數
1 number = 0<= number <=6 
2 number = 0<= number <=2 

即時通訊做它像這樣

podiel_one=random(m_one); 
podiel_two=random(m_two); 
podiel_three= getlast(m_three,podiel_one,podiel_two,m_final,m_one,m_two); 

(我掃描所述數字到變量所以m_one = 6,m_two = 2,m_three = 8,m_final = 10) ,然後我找到最終數目用簡單的數學

podiel_three = m_final-(podiel_one + podiel_two) 

這個工作得很好,但我要修復的情況下,當最後的數字不會是從它的間隔(0 = <數< = 8) 我有毫安德函數爲其

double getlast(double m_three,double* podiel_one,double* podiel_two,double m_final,double m_one,double m_two){ 

double testt=(podiel_one+podiel_two); 
double tmp_three=m_final-testt; 

if(tmp_three>=0 && tmp_three <= m_three){ 
    return tmp_three; 
} 
else{ 
    *podiel_one=random(m_one); 
    *podiel_two=random(m_two); 
    getlast(m_three,podiel_one, podiel_two,m_final,m_one,m_two); 
} 
return 1; 
} 

這個函數如下=如果從間隔的最終數量心不是,它分配新的隨機值到變量,再而做數學題,直到所述數量與時間間隔。問題是,當我嘗試編譯它拋出錯誤和警告/錯誤

invalid operands to binary + (have 'double *' and 'double *') 
|error: incompatible type for argument 3 of 'getlast' 
error: incompatible type for argument 2 of 'getlast 
note: expected 'double *' but argument is of type 'double'| 

作爲C語言即時通訊相當新的失去了現在,我怎麼能解決這個問題,使我的工作方案?

+1

嘗試,'* podiel_one + * podiel_two' –

+0

'testt'將是增加了兩個三分球的結果。將代表任意內存地址的數字加在一起基本上是無用的。 –

回答

0

你所得到的指針和值執行的操作執行的操作所指向之間的混淆。指針在內存中表示和地址。添加到指針可計算指針指向的地址的偏移量。這隻在指針表示數組中的位置時纔有用。在你的情況下,你想要對所指向的值執行這些操作。也就是說,不是

double testt=(podiel_one+podiel_two); 

你想

double testt=(*podiel_one+*podiel_two); 
0

我認爲podiel_onepodiel_two被聲明爲double

double podiel_one, podiel_two; 

所以,當你調用getlast你需要通過這些地址:

podiel_three= getlast(m_three, &podiel_one, &podiel_two, m_final, m_one, m_two); 

然後在getlast您嘗試添加2指針在一起,這不是你想要的。你需要尊重指針得到他們所指向的值:

double testt = *podiel_one + *podiel_two;