2017-09-24 14 views
0

私のコードstruct Stdinfoに構造体を宣言しました。構造体には学生の名前とスコアが含まれています。構造体配列以外の要素へのアクセス

#include <stdio.h> 
     struct Stdinfo{ 
     char name[30]; 
     int score; 
    }; 

次に、struct Stdinfo CreatStruct()という名前の関数の内部にこの構造を作成しました。また、私の構造変数が配列であることに言及する必要があります。構造が作られた後、私はそのアドレスをポインタstruct Stdinfo *structPtrに保存しました。マイ目標が最大のスコアを印刷するのであるが、私はそれへのアクセスを取得する方法がわからない

#include <stdio.h> 
#include <string.h> 

struct Stdinfo{ 
     char name[30]; 
     int score; 
    }; 

struct Stdinfo CreatStruct(); 
void FindAverage(struct Stdinfo * ,size_t); 

int main(void) 
{ 
    //Number of students ~stdnum 
    size_t stdnum; 
    int i; 
    puts("Input numbers of student(s) :") ; 
    scanf("%Iu" ,&stdnum); 

    struct Stdinfo student[stdnum] ; 

    //Filling array of structure 
    for(i=0 ; i < stdnum ; i++) 
    { 
     student[i] = CreatStruct() ; 
    } 

    struct Stdinfo *structPtr; 
    structPtr= student; 
    FindAverage(structPtr ,stdnum); 

    return 0; 
} 

struct Stdinfo CreatStruct() { 

    struct Stdinfo student; 

    getchar(); // Consume newline from previous input 

    printf("Input the name of the student : ") ; 
    fgets(student.name , sizeof (student.name) , stdin); 
    // remove trailing newline from 'fgets()' 
    student.name[strcspn(student.name, "\n")] = 0; 

    puts("Input his(her) score:") ; 
    scanf("%i" ,&student.score) ; 

    return student ; 
} 

void FindAverage(struct Stdinfo *structPtr ,size_t stdnum){ 

    int j; 

    for(j = 1 ; j < stdnum ; j++) 
     { 
      if((structPtr[j] -> score) < (structPtr[j] -> score)) { //Error line 

       /*... 
       * 
       * ? 
       * 
       */ 


       } 
     } 

     ////printf(The answer); 
} 

void FindAverage(struct Stdinfo *structPtr ,size_t stdnum){ 

     int j; 

     for(j = 1 ; j < stdnum ; j++) 
      { 
       //Error line 
       if((structPtr[j] -> score) < (structPtr[j] -> score)) { 

        /*... 
        * 
        * ? 
        * 
        */ 


        } 
      } 

      ////printf(The answer); 
    } 

私の全体のコードを:それから私は、以下の関数にアドレスを渡します。

この問題の解決に役立つ人がいれば幸いです。

+0

「エラーライン」にはどのエラーがありますか? – MondKin

+1

不必要なスペースや括弧を削除した 'if(structPtr [j] - > score score)'の理由を理解できません。 –

+0

@ MondKin- if((structPtr [j] - > score)<(structPtr [j] - > score)) –

答えて

0

は、あなたが二回配列を逆参照しているので、あなたが抱えているエラーがあるstructPtr[j].

structPtr[j] ->を交換してください。 ->オペレータは(*x).のためだけ糖衣構文で、[N]は、structPtr[j]->**(structPtr + j)に変換するので、あなたのケースで*(x + N)ためだけの構文糖であるとき、あなたはこのように一度だけ、それを間接参照する必要があり、配列アクセスするために:*(structPtr + j)を。

関連する問題