2017-09-24 7 views
0

Ich habe eine Struktur in meinem Code struct Stdinfo, die Name und Ergebnis der Studenten enthält deklariert.Zugriff auf Struktur Nicht-Array-Element

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

Dann habe ich diese Struktur in einer Funktion mit dem Namen struct Stdinfo CreatStruct(). Es sollte auch erwähnt werden, dass meine Strukturvariable Array ist. Nachdem die Struktur erstellt wurde, habe ich ihre Adresse in einem Zeiger struct Stdinfo *structPtr gespeichert. Dann habe ich die Adresse an die Funktion unten:

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

meinen ganzen Code:

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

Mein Ziel ist die größte Punktzahl zu drucken, aber ich weiß nicht, wie der Zugriff auf sie zu erhalten .

Ich schätze es, wenn jemand mir hilft, dieses Problem zu lösen.

+0

Welchen Fehler bekommen Sie in 'Fehler Zeile'? – MondKin

+1

Ich verstehe nicht, warum 'if (structPtr [j] -> score score)', unnötige Leerzeichen und Klammern entfernt. –

+0

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

Antwort

0

ersetzen structPtr[j] -> mit structPtr[j].

Der Fehler die Sie haben, weil Sie das Array zweimal sind dereferencing. Der -> Operator ist nur syntaktischer Zucker für (*x). und [N] ist nur syntaktischer Zucker für *(x + N) so in Ihrem Fall structPtr[j]-> zu **(structPtr + j) übersetzt, wenn um das Array nur einmal so zu dereferenzieren zugreifen müssen: *(structPtr + j).

Verwandte Themen