1. ホーム
  2. c

[解決済み] 「error: expected ';', ',' or ')' before numeric constant" と表示される。

2022-02-11 03:47:55

質問

関数の平均値を出すプログラムです。エラーが発生します。

error: 数値定数の前に ';', ',' または ') が必要です。

をビルドするたびに、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);
}

解決方法は?

識別子を使用している 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; を最後に追加します。


第1引数の型を int[] (の配列)。 int ) から int * (へのポインタ)。 int という関数があります。 定義 は、問題で与えられたプロトタイプと一致します。その関数は 宣言 として

int avg_array (int*, int);

これらの引数には識別子がなく、型のみが指定されています。 これは有効なC言語ですが、多くのスタイルガイドでは、引数に名前を付けると読者が意味や意図を理解しやすくなるため、これを禁止しています。 例えば、プログラミング・インターフェースを書く場合、プログラマーが目にするのはヘッダーファイルの中の関数プロトタイプだけでしょう。 正しい関数呼び出しを書くためには、引数が何であるかが明確でなければならない。 とにかく、識別子を入れることは、次のようになる。

int avg_array (int *my_array, int size);

というのは 定義 上で使った