web-dev-qa-db-ja.com

「エラー:数値定数の前に ';'、 '、'または ')'が必要です」が私のコードに表示されます

プログラムは、平均を作る機能についてです。エラーが発生します:

エラー:数値定数の前に ';'、 '、'または ')が必要です

avg_array()関数内でビルドするたびに。助けていただければ幸いです、ありがとう!

#include <stdio.h>      
#define SIZE 5

// Prototypes
int avg_array (int*, int);          

main()
{
    int values[SIZE];
    int avg;
    int i;

    printf("Enter 5 numbers please. \n");

    for(i=0; i<SIZE; i++)
    {   
        scanf("%d", &values[i]);
    }

    avg = avg_array(values, SIZE);
    printf("\n The avg of the array is %d \n", avg);

    getchar();
    getchar();
} // end main()


/* Implement avg_array() WHERE THE ERROR PERTAINS */
avg_array(int my_array[], int SIZE)
{
    int sum;
    int i;
    int fxn_average;

    for(i=0; i<SIZE; i++)
    {
        sum = sum + my_array[i];
    }

    fxn_average = (sum/SIZE);

    return (fxn_average);
}
4
madLad

識別子SIZEを引数として使用しています。これは、プリプロセッサによって5に変換されるマクロでもあります。プリプロセッサがマクロを適用すると、次のようになります。

avg_array (int my_array[], int 5)

5は識別子ではなく数値定数であるため、エラーが発生します。変数名を変更します。

上で宣言されたプロトタイプと一致するはずの戻り値の型が欠落している関数シグネチャもあるようです。代わりにこれを試してください:

int avg_array (int *my_array, int size)
{
    int sum = 0;
    int i;

    for(i=0; i<size; i++)
    {
       sum = sum + my_array[i];
    }
    return sum/size;
}

変数sumは0に初期化する必要があります。代わりに最後にfxn_averageだけを使用できるため、ローカル変数return sum/size;は必要ありません。


最初の引数の型をint[]intの配列)からint *intへのポインター)に変更したので、関数definition =質問で与えられたプロトタイプと一致します。関数は宣言されたとして

int avg_array (int*, int);

これらの引数には識別子がありません。それらのタイプのみが指定されます。これは有効なCですが、引数に名前を付けると読者が意味や意図を理解するのに役立つため、多くのスタイルガイドがそれを規定しています。たとえば、プログラミングインターフェイスを作成している場合、プログラマーが目にするのは、ヘッダーファイル内の関数プロトタイプだけです。正しい関数呼び出しを書くための引数が何であるかを明確にする必要があります。とにかく、識別子の追加は次のようになります。

int avg_array (int *my_array, int size);

これは、上記で使用したdefinitionと同じです。

7
e0k