2015-11-06 163 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;