関数が機能していない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
からし

関数が機能していない

#1

投稿記事 by からし » 3年前

コード:

#include <stdio.h>

int beki ( int num, double input, int jou, double ans );

int main(void)
{
	double real;
	double result;
	int power;
	int i;
	
	printf( "実数値=> " );
	scanf( "%lf", &real );
	
	printf( "何乗しますか?=>  " );
	scanf( "%d", &power );
	
	beki( i, real, power, result );
	
	printf( "%fの%d乗は、%fです。\n", real, power, result );
		
	return 0;
}

int beki( int num, double input, int jou, double ans  )
{
	ans = 1.0f;
	for( num = 0; num < jou; num++ ){
		ans *= input;
	}
	
	return ans;
}
実数値、乗数を指定して、その結果を出力するコードですが、int beki関数で計算した結果をmainのresultに返したいのですが上手くいきません。
何が足りない、何が間違っているのでしょうか?

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 関数が機能していない

#2

投稿記事 by みけCAT » 3年前

beki関数から返した結果をmain関数側で全く使わず、投げ捨てているのが間違っています。
また、beki関数の引数numおよびansの値を使わずにローカル変数のように使っていること、
およびせっかくdoubleで計算した結果をintで返しているのは不自然に思えます。

コード:

#include <stdio.h>

/* 計算結果をdoubleにし、引数numとansを削除する */
double beki ( double input, int jou );

int main(void)
{
	double real;
	double result;
	int power;
	int i;
	
	printf( "実数値=> " );
	scanf( "%lf", &real );
	
	printf( "何乗しますか?=>  " );
	scanf( "%d", &power );
	
	/* 変更に合わせて引数を削除し、返された結果を受け取る */
	result = beki( real, power );
	
	printf( "%fの%d乗は、%fです。\n", real, power, result );
		
	return 0;
}

/* 計算結果をdoubleにし、引数numとansを削除する */
double beki( double input, int jou )
{
	/* 削除した引数のかわりにローカル変数を追加する */
	int num;
	double ans;

	ans = 1.0f;
	for( num = 0; num < jou; num++ ){
		ans *= input;
	}
	
	return ans;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 13年前

Re: 関数が機能していない

#3

投稿記事 by box » 3年前

beki()
の設計方針は?
つまり、
何をもらって(あるいは何ももらわず)
どんな処理をして
何を返すか(あるいは何も返さないか)
をきちんと考えてから
beki()
のコードを書いてますか?ってことです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

返信

“C言語何でも質問掲示板” へ戻る