ページ 11

printf関数のエラー(エラー番号4477)

Posted: 2016年5月11日(水) 21:14
by まちゃみー

コード:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

 int main(void)
{
	int i1;
	int i2;
	double ave;

	//ここまで関数の宣言

	printf("Data1を入力してください。\n");
	scanf("%d", &i1);
	printf("Data2を入力してください。\n");
	scanf("%d", &i2);

	//ここまで整数の入力

	ave = (i2 / i1)*100;
	printf("Data1はData2の%f%%分ですよ",&ave );

	return 0;

}
二つの整数を入力して一方が他方の何パーセント分の値か,ということを求めるプログラムを作ったつもりなのですが,
C4477: 'printf' : format string '%f' requires an argument of type 'double', but variadic argument 1 has type 'double *'
とエラーが発生しうまく実行できません.
こちらのエラーは「%fはdouble用の変換仕様なんだけどアナタはdouble *を指定していますよ」ということなのでしょうか.
Microsoft Visual Studio 2015を使用しています.どちらを直せばよいのかご教授頂けたら幸いです.

Re: printf関数のエラー(エラー番号4477)

Posted: 2016年5月11日(水) 21:36
by みけCAT
指摘されている通り、printfに正しい型のデータを渡せばいいでしょう。

コード:

printf("Data1はData2の%f%%分ですよ",&ave );

コード:

printf("Data1はData2の%f%%分ですよ",ave );
ついでに、このままだと割り算の結果が切り捨てられてdoubleを使う意味が減るので、

コード:

ave = (i2 / i1)*100;

コード:

ave = ((double)i2 / i1)*100;
とするといいかもしれません。
さらにメッセージの内容を考えると、

コード:

ave = ((double)i1 / i2)*100;
の方がいいかもしれません。