我希望通过我的家庭作业来推动正确的方向。这是一个问题:
(1)写一个名为input的C函数返回void,这个 功能提示用户输入 两个整数后跟一个双精度 精度值。这个函数读取 这些值来自键盘和 找到两个整数的乘积 进入。该函数使用call by 参考来传达价值观 读取的三个值和产品 计算回主程序。 然后主程序打印出来 读取三个值和产品 计算。提供测试结果 输入: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);
}
我无法弄清楚如何用指针真正引用变量,这对我来说不合适。
任何帮助都会很棒!
答案 0 :(得分: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
答案 1 :(得分:2)
你几乎就在那里,但不是使用新变量x
,y
和z
,而是使用你传递的指针:
scanf("%d", i);
scanf("%d", j);
scanf("%f", k);
*pro += ((*i) * (*j) * (*k));
答案 2 :(得分: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.
}
答案 3 :(得分:1)
*pro += (x * y * z);
这将打破可怕的局面。您正在将产品添加到事先发生的任何垃圾中。您想要删除+
,即:
*pro = (x * y * z);
答案 4 :(得分:0)
您的程序没有做的是将输入值设置为i,j和k。
而不是使用x,y和z,而是使用参数。