2017-10-12 3 views
0

실린더의 표면적과 부피를 계산하는 간단한 프로그램을 작성하고 있습니다. main()에 모든 코드를 작성하는 대신 3 가지 기능을 사용하고 있습니다.포인터를 사용한 참조 전달

첫 번째 기능은 높이와 반지름의 입력 데이터를 읽고 값을 주 프로그램으로 다시 전달합니다.

두 번째 함수는 height 및 radius 인수를 사용하여 영역 및 볼륨 값을 계산하고 각 영역을 주 프로그램으로 다시 전달합니다.

세 번째 함수는 print 문에서 인수 영역과 볼륨을 사용합니다.

#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 ("%의 g ", pr);

나는 포인터에 대한 근본적인 이해를 가지고 있으며, scanf가 정보를 호출자에게 반환해야한다는 것을 알고 있으므로 제어 문자열 뒤에 오는 인수는 호출을 참조로 사용해야합니다. 이해 좀 도와주세요!

+3

C 만'pass by value' 참조가 아님 – 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 참조를 제공하십시오.

관련 문제