ページ 11

何処が間違っているのか教えてください。

Posted: 2015年11月21日(土) 20:49
by saori
ポインタを利用して、3つの入力された値の合計と平均を出したいのですが、何度してもエラーしか出てこず困っています。
教えてください。

コード:

#include<stdio.h>
double w(double a, double b, double c, double *goukei, double *ave);

int main(void)
{
	double a, b, c, goukei, heikin, d;

	printf("a:");
	scanf("%f", &a);
	printf("b:");
	scanf("%f", &b);
	printf("c:");
	scanf("%f", &c);

	goukei = 0;
	heikin = 0;

	d = w(a, b, c, &goukei, &heikin);

	printf("\na+b+c:%f\n", goukei);
	printf("(a+b+c)/3:%f\n", heikin);

	return 0;
}

double w(double x, double y, double z, double *goukei, double *ave)
{
	*goukei = x + y + z;
	*ave = (x + y + z) / 3;

	printf("\n合計:%f\n", *goukei);
	printf("平均:%f\n", *ave);

	return 0;
}

Re: 何処が間違っているのか教えてください。

Posted: 2015年11月21日(土) 21:11
by みけCAT
scanfでdouble型の値を読み込む時は、%fを使ってはいけません。%lfを使ってください。
printfでdouble型の値を出力する時は、%fを使うのが正しいです。
きちんと読み込めたかどうかを、scanfの戻り値で確認するようにすると、さらに良いでしょう。

Re: 何処が間違っているのか教えてください。

Posted: 2015年11月21日(土) 21:14
by box
saori さんが書きました:ポインタを利用して、3つの入力された値の合計と平均を出したいのですが、何度してもエラーしか出てこず困っています。
どんなエラーが出ますか?教えてください。
saori さんが書きました:

コード:

	scanf("%f", &a);
	scanf("%f", &b);
	scanf("%f", &c);
%f
のかわりに
%lf
を使うとうまくいくのではないでしょうか。

ところで、
saori さんが書きました:

コード:

double w(double a, double b, double c, double *goukei, double *ave);
w関数の戻り値の型がdoubleである必然性はないように思います。
void
でいいのではないでしょうか。
saori さんが書きました:

コード:

	double a, b, c, goukei, heikin, d;
	d = w(a, b, c, &goukei, &heikin);
変数dの定義をサクッと消して(どうせ後ろの方で使ってないし)、
w関数の実行部分は

コード:

	w(a, b, c, &goukei, &heikin);
でいいはずです。