2017-10-12 17 views
0

円筒の表面積と体積を計算する簡単なプログラムを書いています。 main()にすべてのコードを書く代わりに、私は3つの関数を使用しています。ポインタによる参照渡し

最初の関数は、高さと半径の入力データを読み込み、値をメインプログラムに戻します。

第2の関数は、引数heightとradiusを使用して領域とボリュームの値を計算し、それぞれをメインプログラムに戻します。

3番目の関数は、printステートメントの引数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); 8:24:警告:^

surfaceAreaCylinder.c 形式 '%g' はタイプ 'フロート*' の引数を期待するが、引数2 '二重*' [-Wformat =] のscanf( "%gを入力しました"、pr);

私はポインタの根本的な理解を持っており、scanfが情報を呼び出し側に返さなければならないことを知っています。したがって、制御文字列の後の引数は呼び出しによる参照を使用する必要があります。私の理解を助けてください!

+3

'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"を使用してください。詳細については、例えば、scanfの参照をcppreference.comでお伝えください。

関連する問題