2011-10-20 98 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. 您的主要聲明不正確。

你想要的代碼是這樣的:

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; 
} 

注意,你缺少的sTable初始化。

更重要的是,你真的應該將陣列的長度作爲參數傳遞給maxAverage。這將允許您更靈活地使用任何長度的數組。

+0

在maxAverage中'.value'的引用應該是'.average',我相信。 – jwodder

+0

@jwodder謝謝,我剛剛在編輯器中移動了代碼,並未嘗試編譯它。 –

+0

非常感謝,這是非常有用的:) –

0

首先,你不能聲明或定義另一個函數中的函數,因此在main之外移動maxAverage(順便說一句,應該返回int,而不是void)。其次,給定一個結構數組,你不能只從結構的某個字段自動創建一個值的數組;如果需要,您必須手動聲明一個單獨的數組(在本例中)float s,然後逐個複製average字段。簡單的方法是簡單地將sTable本身傳遞給maxAverage,並使maxAverage僅對陣列中結構的average字段進行操作。

相關問題