2017-10-12 139 views
0

我正在写一个简单的程序来计算圆柱体的表面积和体积。我没有在main()中写所有的代码,而是使用了3个函数。用指针传递引用

第一个函数读取高度和半径的输入数据,并将值传递回主程序。

第二个函数使用参数height和radius来计算面积和体积的值,并将每个参数传递回主程序。

第三个函数在打印语句中使用参数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' 期望类型 '浮动*' 的参数,但参数2具有输入 '双*'[-Wformat =] scanf(“%g”,ph); ^

surfaceAreaCylinder.c:24:8:警告:格式 '%G' 期望类型 '浮动*' 的参数,但参数2具有输入 '双*'[-Wformat =] 的scanf(“%克“,pr);

我对指针有一个基本的了解,并且知道scanf必须将该信息返回给调用者,因此控件字符串后面的参数必须使用调用引用。请帮我理解!

+3

C只能通过值传递而不能通过引用 – krpra

+0

在'math.h'中有一个值PI –

+0

'* pa =(2 * PI * h * r);' - >'* pa = 2 * PI * r *(h + r);'? – BLUEPIXY

回答

4

"%g"适用于数据类型float,但您提供了一个类型为double的参数。改为使用"%lg"。有关更多详细信息,请参阅cppreference.com上的scanf参考。