실린더의 표면적과 부피를 계산하는 간단한 프로그램을 작성하고 있습니다. 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가 정보를 호출자에게 반환해야한다는 것을 알고 있으므로 제어 문자열 뒤에 오는 인수는 호출을 참조로 사용해야합니다. 이해 좀 도와주세요!
C 만'pass by value' 참조가 아님 – krpra
'math.h'에는 PI –
'* pa = (2 * PI * h * r);'->'* pa = 2 값이있다. * PI * r * (h + r);'? – BLUEPIXY