2015-11-06 2 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

Try '* podiel_one + * podiel_two' –

+0

' testt' будет результат сложения двух указателей.сложение чисел, которые представляют собой произвольные адреса памяти, в основном бесполезно. –

ответ

0

Вы путаться между операциями, выполняемыми с указателем и операций, выполняемых на значения которые указывали на. Указатель представляет и адрес в памяти. Добавление к указателю вычисляет адрес смещения от адреса, на который указывает указатель. Это полезно только тогда, когда указатель представляет позицию в массиве. В вашей ситуации вы хотите выполнить эти операции над указанным значением. То есть, вместо того, чтобы

double testt=(podiel_one+podiel_two); 

Вы хотите

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

Я полагаю, podiel_one и podiel_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; 
Смежные вопросы