2010-03-22 197 views
4

我只想在这里以正确的方向推动我的家庭作业。下面是这样一个问题:通过引用函数调用

(1)编写一个C函数称为输入返回空隙,这 函数提示的 两个整数后跟双 精度值输入该用户。此功能从键盘读取 这些值,并且 找到输入的两个整数 的乘积。该功能使用通过 的调用参考将三个值读取的 和产品 的值通信计算回主程序。 然后主程序打印出 三个数值读数和产品 的计算值。提供测试结果 输入: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函数读取的数字,您可以使用指针iptrjptrkptrproptr的直接读出值转换为main函数声明为变量ijk

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 2010-03-22 06:01:22

+0

@Chad,只读取它并在主要打印它。 – 2010-03-22 06:05:14

+0

@查德:那是我从问题中得到的。 – codaddict 2010-03-22 06:06:37

0

你的程序没有做的是将输入的值设置为i,j和k。

而不是使用x,y和z,而是使用参数。

2

就快,但不是制造新的变量xy,并且z,使用指针,你通过:

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

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

为什么'+ ='?这个double还没有初始化,所以你可能会得到垃圾。 – dreamlax 2010-03-22 06:38:19

+0

那是这样的代码。 – rlbond 2010-03-27 02:08:03

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

这将打破可怕。您正在将产品添加到事先在专业版中发生的任何垃圾中。你想从pro回来除了删除+,即:

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

您加入pro但没有初始化,你是不是传递值。您将值存储到传入变量的地址中。在这种情况下,您需要取消引用访问/检索值的指针*i,并且在您的方法中直接使用传递的地址 - 那么您不需要再次访问它们的地址。

This works - I double with 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