2017-09-24 1 views
0

J'ai déclaré une structure dans mon code struct Stdinfo qui contient le nom et le score des étudiants.Obtenir l'accès à la structure de l'élément non-tableau

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

Ensuite, j'ai créé cette structure dans une fonction avec le nom de struct Stdinfo CreatStruct(). Il convient également de mentionner que ma variable de structure est array. Après que la structure est faite j'ai stocké son adresse dans un pointeur struct Stdinfo *structPtr. Ensuite, je suis passé l'adresse à la fonction ci-dessous:

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

mon code tout:

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

Mon but est d'imprimer le plus grand score mais je ne sais pas comment y avoir accès .

J'apprécie si quelqu'un m'aide à résoudre ce problème.

+0

Quelle erreur obtenez-vous dans 'Error line'? – MondKin

+1

Je ne comprends pas pourquoi 'si (structPtr [j] -> score score)', ayant supprimé les espaces inutiles et les parenthèses. –

+0

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

Répondre

0

Remplacer structPtr[j] -> avec structPtr[j].

L'erreur que vous rencontrez est parce que vous déréférencement le tableau deux fois. L'opérateur -> est juste du sucre syntaxique pour (*x). et [N] est le sucre syntaxique pour juste *(x + N) donc dans votre cas, structPtr[j]-> se traduit **(structPtr + j), quand pour accéder au tableau que vous devez déréférencer une seule fois comme ceci: *(structPtr + j).