2016-03-26 6 views
0

私は次のように機能があり、intの配列の平均値を求める関数を定義:C言語のprintfフロートエラー

float MeanInt(int x[],int num){ 
    float mean, sum = 0.0f,res=0.0f; 
    int i; 
    for(i=0;i<num;i++){ 
     sum += (float)(x[i]); 
     printf("x[%d] is %d\n", i,x[i]); 
     printf("sum is %f\n", sum); 
    } 
    res = sum/((float)(num)); 
    printf("mean should be %f\n", res); 
    return res; 
} 

printf()この関数内ですべてが正常に動作します。以下のように の問題は、私は私のプロジェクトでそれを使用するときにということである。

printf("mean number is %f\n", MeanInt(ls_tr_acl,num_round)); 

私はというエラーに会う: 形式%fはタイプdoubleの引数を期待していますが、引数2は、私はint を入力しています関数MeanInt()内のprintf()が正確な結果を正確に表示するため、完全に混乱します。私もいくつかのおもちゃの例でMeanInt()をテストし、それは常に正しく動作します。この問題はプロジェクトで実行した場合にのみ発生します。

+1

[Cのユーザー定義関数の競合型の可能な複製](http://stackoverflow.com/questions/35435953/confliction-type-for-a-user-defined-function-in-c) – usr2564301

答えて

2

最初の呼び出しの前に関数MeanIntを宣言するのではなく、MeanIntの型は任意の数の引数をとってintを返す関数であるとコンパイラが想定しています。

修正
として(宣言を含む)は、適切なヘッダーファイルを含める、または使用上の定義を移動したり、使用する前にそれを宣言します。あなたが上部にグローバルスコープでそれを宣言することができ

float MeanInt(int x[],int num); 

ファイルまたは狭い範囲でも使用できます。

+0

OMG 。そのとおり! – pfc

+0

ありがとう!!!!!!!!!!!!!!!!!!! – pfc

+0

gccやMSVCは、 '-Wall'コンパイラオプションでこれについて警告することができます。 –