Вызов по справочной функции - PullRequest
4 голосов
/ 22 марта 2010

Я просто хотел бы толкнуть в правильном направлении с моим домашним заданием.Вот вопрос:

(1) Написать функцию C, называемую input, которая возвращает void, эта функция предлагает пользователю ввести два целых числа, за которыми следует значение двойной точности.Эта функция считывает эти значения с клавиатуры и находит произведение двух введенных целых чисел.Функция использует вызов по ссылке для передачи значений трех прочитанных значений и продукта, рассчитанного обратно в основную программу.Затем основная программа печатает три прочитанных значения и рассчитывает произведение.Предоставить результаты теста для ввода: 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);

} 

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

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

Ответы [ 5 ]

3 голосов
/ 22 марта 2010

Вы добавляете к 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
2 голосов
/ 22 марта 2010

Вы почти у цели, но вместо создания новых переменных x, y и z используйте переданные вами указатели:

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

*pro += ((*i) * (*j) * (*k));
1 голос
/ 22 марта 2010
*pro += (x * y * z);

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

*pro = (x * y * z);
1 голос
/ 22 марта 2010

При чтении чисел в функции 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 голосов
/ 22 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...