2017-07-04 1 views
-1

2つの一般的な浮動小数点数(aとbにする)をとり、変数であるので、a = abおよびb = baである。 小数点以下2桁の値を出力する必要があります。ブロックを終了した後で動作する必要があります。コードには何が問題なのですか?C - 2つの浮動小数点をとり、ポインタを使ってブロックの後ろにその差を返す関数

#include <stdio.h> 
float diff_abs (float *a, float *b) { 
*a= *a-*b; 
*b= *b-*a; 
} 

int main(void) { 
    float c, d; 
    scanf("%f", &c); 
    scanf("%f", &d); 
printf("%.2f\n%.2f", diff_abs(&c, &d)); 
return 0; 
} 

お寄せいただきありがとうございます。

+3

問題は、t 2番目の計算では、aの新しい値が使用されます。私は '* b = - * a;'の実行をお勧めします。 – NieDzejkob

+0

'2つの一般的な浮動小数点数をとる' ... 1)一般的な浮動小数点は何ですか? 2)ポインタ!=スカラー変数。 –

+0

別の問題は、 'diff_abs'関数が' float'値を返すと想定されていますが、実際に何も返さないということです。 –

答えて

1

まず、あなたはそうするあなたの機能を変更する簡素化する次の計算にそれを使用して、その後a値を変更している:あなたは、C関数内の1を複数の変数を返すことができないので、

void diff_abs (float *a, float *b) { 
    *a= *a-*b; 
    *b = -*a 
} 

セカンドあなたの関数がちょうどを使用するように、あなたはprintf機能でfloatsとして使用することはできませんvoidを返しますので、解決策は、ポインタを使用しながら、(あなたが何とかやっているように)最後に

void返す関数を使用しますが、変数を変更することですこのようなとd

:もちろん

printf("%.2f\n%.2f",c,d); 

は呼び出すことを忘れないでください:

diff_abs(&c, &d) 

を印刷しようとする前に、複数を返すために、このtopicを参照することができますCの変数

関連する問題