【发布时间】:2018-03-24 20:58:01
【问题描述】:
我正在编写一个简单的程序来计算圆柱体的表面积和体积。我没有在 main() 中编写所有代码,而是使用了 3 个函数。
第一个函数读取高度和半径的输入数据,将值传回主程序。
第二个函数使用参数高度和半径来计算面积和体积的值,并将每一个值传递回主程序。
第三个函数在打印语句中使用参数 area 和 volume。
#include<stdio.h>
#define PI 3.14159
static void inputData(double *ph, double *pr);
static void computeResults(double h, double r, double *pa, double *pv);
static void displayAnswer(double a, double v);
main()
{
double h,r,a,v;
inputData(&h, &r);
computeResults(h, r, &a, &v);
displayAnswer(a, v);
return;
}
static void inputData(double *ph, double *pr)
{
printf("Height: ");
scanf("%g", ph);
printf("Radius: ");
scanf("%g", pr);
}
static void computeResults(double h, double r, double *pa, double *pv)
{
*pa = (2 * PI * h * r);
*pv = (PI * h * r * r);
}
static void displayAnswer(double a, double v)
{
printf("The Area is: %f", a);
printf("The Volume is: %f", v);
}
我在 inputData 函数中的 scanf 行有问题。
错误信息:
surfaceAreaCylinder.c:22:8: 警告:格式“%g”需要“float *”类型的参数,但参数 2 的类型为“double *”[-Wformat=] scanf("%g", ph); ^
surfaceAreaCylinder.c:24:8:警告:格式“%g”需要“float *”类型的参数,但参数 2 的类型为“double *”[-Wformat=] scanf("%g", pr);
我对指针有基本的了解,知道scanf必须将信息返回给调用者,因此控制字符串后面的参数必须使用引用调用。请帮我理解!
【问题讨论】:
-
C 仅
pass by value不是引用 -
math.h中有一个 PI 值 -
*pa = (2 * PI * h * r);-->*pa = 2 * PI * r *(h + r);?
标签: c scanf pass-by-reference