2011-10-20 16 views
1

私はCの構造体の概念をかなり新しくしており、問題が発生しています。私はここに掲載された類似の問題を探しましたが、何も見つかりませんでした。そう、すべてのstruct-arrayの変数を関数のパラメータとして渡すことができません

struct Student 
{ 
    float average; 
    int ID; 
    int grades[5]; 
    char firstName[20], lastName[20]; 
}; 

void main(void) 
{ 
    struct Student sTable[10]; 

    float maxAverage(float sTable[].average) 
    { 
     int i; 
     float max = 0; 

     for(i = 0;i < 10; ++i) 
     { 
      if(sTable[i].value > max) 
      { 
       max += sTable[i].value; 
      } 
     } 
     return max; 
    } 

    printf("%f",maxAverage(sTable[].average)); 
} 

答えて

2

ここにはいくつか問題があります。

  1. Java、C#、Pythonなどの言語では、他の関数の中に関数をネストすることはできません。
  2. 構造体配列を誤って渡しています。
  3. 主な宣言が間違っています。あなたがsTableの初期化が欠けている

    struct Student 
    { 
        float average; 
        int ID; 
        int grades[5]; 
        char firstName[20], lastName[20]; 
    }; 
    
    float maxAverage(struct Student sTable[]) 
    { 
        int i; 
        float max = 0; 
    
        for(i = 0;i < 10; ++i) 
        { 
         if(sTable[i].value > max) 
         { 
          max += sTable[i].average; 
         } 
        } 
        return max; 
    } 
    
    int main(void) 
    { 
        struct Student sTable[10]; 
        //initialize sTable 
        printf("%f", maxAverage(sTable)); 
        return 0; 
    } 
    

    注:

あなたは、このようなコードに何かをしたいです。

実際に配列の長さをパラメータとしてmaxAverageに渡す必要があります。これにより、任意の長さの配列をより柔軟に使用できます。

+0

'maxAverage'の' .value'への参照は '.average'でなければなりません。 – jwodder

+0

@jwodderありがとう、私はちょうどエディタでコードを移動し、コンパイルしようとしませんでした。 –

+0

ありがとう、これはとても役に立ちました:) –

0

まず、あなたが宣言するか、別の関数内で関数を定義することはできません。私は何をしようとしていることほど、関数のパラメータとして構造体の配列に変数を渡すですmaxAveragemainの外に移動します(これは、偶然にも、intで、voidではありません)。第二に、構造体の配列を与えられた場合、構造体の特定のフィールドから値の配列を自動的に作成することはできません。必要ならば、(この場合は)floatの別々の配列を手動で宣言してから、averageフィールドを1つずつコピーする必要があります。より簡単な方法は、sTable自体をmaxAverageに渡し、maxAverageは配列内の構造体のaverageフィールドでのみ操作することです。

関連する問題