2010-03-22 5 views
4

я бы так же, как толчок в правильном направлении здесь с моим домашним заданием. Вот вопрос:Вызова по ссылке Функции

(1) Написать функцию С названием вход, который возвращает пустоту, эта функция предлагает пользователю для ввода двух целых чисел с последующим двойным значением точности. Эта функция считывает эти значения с клавиатуры, а находит произведение двух целых чисел . Функция использует вызов по ссылке , чтобы сообщить значения трех значений, считанных, и продукт , рассчитанный обратно в основную программу. Затем основная программа печатает три значения, считанные и вычисленный продукт . Укажите результаты испытаний для : 3 5 23.5. Не используйте массивы или глобальные переменные в вашей программе.

И вот мой код:

#include <stdio.h> 
#include <stdlib.h> 

void input(int *day, int *month, double *k, double *pro); 

int main(void){ 
    int i,j; 
    double k, pro; 


    input(&i, &j, &k, &pro); 
    printf("%f\n", pro); 
    return 0; 
} 

void input(int *i, int *j, double *k, double *pro){ 

    int x,y; 
    double z; 
    double product; 

    scanf("%d", &x); 
    scanf("%d", &y); 
    scanf("%f", &z); 


    *pro += (x * y * z); 

} 

Я не могу понять, как ссылаться на переменные с указателями на самом деле, он просто не работает для меня.

Любая помощь будет замечательной!

ответ

1

При чтении чисел в функции input вы можете использовать указатели iptr, jptr, kptr и proptr читать значения непосредственно в переменных i, j и k объявленных в функции main как:

void input(int *iptr, int *jptr, double *kptr, double *proptr){ 

    scanf("%d", iptr); // read directly into i using pointer to i. 
    scanf("%d", jptr); 
    scanf("%f", kptr); 

    *proptr = ((*iptr) * (*jptr)); // compute product and assign to pro. 
} 
+0

ли я, или же этот вопрос не задать мне делать что-либо с двойным значением, считанным в? – Chad

+0

@ Прощайте, только чтобы прочитать его и распечатать в главном. –

+0

@ Chad: То, что я получил от вопроса. – codaddict

0

Что ваша программа не делает, это установить значения ввода для i, j и k.

Вместо использования x, y и z используйте вместо этого параметры.

2

Вы почти там, но вместо того, чтобы новые переменные x, y и z, использовать указатели вы прошли:

scanf("%d", i); 
scanf("%d", j); 
scanf("%f", k); 

*pro += ((*i) * (*j) * (*k)); 
+0

Почему '+ ='? Двойник не был инициализирован, поэтому вы, вероятно, получите мусор. – dreamlax

+0

Ну, это было в его коде. – rlbond

1
*pro += (x * y * z); 

Это сломает ужасно. Вы добавляете продукт к любому мусору, который раньше был в профи. Вы хотите удалить +, т.е .:

*pro = (x * y * z); 
3

Вы добавляя к pro но не инициализирована, вы не проходящие значения обратно, кроме pro. Вы сохраняете значения в адресах переданных переменных. В этом случае вам нужно указать указатели разыменования для получения/получения значения, *i, а в вашем методе использовать переданные адреса напрямую - тогда вам не нужно будет принимать адрес из них снова.

Эта работа - я заменил double на float ...:

#include <stdio.h> 
#include <stdlib.h> 

void input(int *day, int *month, float *k, float *pro); 

int main(void){ 
    int i,j; 
    float k, pro; 

    i = j = k = pro = 0; 

    input(&i, &j, &k, &pro); 
    printf("%f\n", pro); 
    printf("%d : %d : %f\n", i,j,k); 
    return 0; 
} 

void input(int *i, int *j, float *k, float *pro){ 

    scanf("%d", i); 
    scanf("%d", j); 
    scanf("%f", k); 

    printf("%d - %d - %f\n", *i,*j,*k); 

    *pro += (*i * *j * *k); 
} 

Выход:

1 
2 
3.5 
1 - 2 - 3.500000 
7.000000 
1 : 2 : 3.500000 
Смежные вопросы