2016-08-03 15 views
0
#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int size,choice; 
    printf("student size:\n"); 
    scanf("%d", &size); 

    typedef struct 
    { 
     int age; 
     double gpa; 
     char name[]; 
    }STUDENT; 
    STUDENT *array = (STUDENT *) malloc(sizeof(STUDENT) * size); 
    printf("\n(1) Add a student\n(2) Delete a student\n(3) Save all students\n(4)Quit\n"); 
    scanf("%d",&choice); 
    while (choice != 4){ 
     switch (choice) { 
      STUDENT temp; 
      STUDENT *tempptr = &temp; 
      int cellNum; 
      case 1: 
       printf("Enter age gpa and name:\n"); 
       scanf("%d %f %s",&tempptr->age,&tempptr->gpa,&tempptr->name); 
       printf("Enter cell number:\n"); 
       scanf("%d", &cellNum); 
       if (cellNum > (size-1)){ 
        printf("Invalid cell number\n"); 
        break; 
       }else{ 
        *(array + cellNum) = temp; 
       } 
      case 3: 
       printf("stupid c syntax rules"); 
       FILE *p = fopen("students.txt","w"); 
       int i = 0; 
       for (i=0; i<size; i++){ 
        fprintf(p, "%d, %f, %s\n",*(array+i).age,*(array+i).gpa,*(array+i).name); 
       } 
     } 
     printf("\n(1) Add a student\n(2) Delete a student\n(3) Save all students\n(4)Quit\n"); 
     scanf("%d",&choice); 
    } 

    return 0; 
} 

bekommen Fehler:C dynamische Struktur Fehler

main.c:40:56: error: request for member 'age' in something not a structure or union          
        fprintf(p, "%d, %f, %s\n",*(array+i).age,*(array+i).gpa,*(array+i).name);        
                 ^                
main.c:40:71: error: request for member 'gpa' in something not a structure or union          
        fprintf(p, "%d, %f, %s\n",*(array+i).age,*(array+i).gpa,*(array+i).name);        
                    ^            
main.c:40:86: error: request for member 'name' in something not a structure or union          
        fprintf(p, "%d, %f, %s\n",*(array+i).age,*(array+i).gpa,*(array+i).name); 

warum ist das passiert? Dank

+0

'Char Name [];' benötigt Größe. – BLUEPIXY

Antwort

1

Der . Operator ist eine höhere Priorität als einstellige * (siehe here). Also zuerst (vor der Dereferenzierung) versucht der Compiler ein age Feld in (array+i) zu finden, das keine Struktur, sondern ein Zeiger ist.
Sie möchten die *(array+i).age entweder durch (array+i)->age oder (*(array+i)).age ersetzen.

+0

Danke, das hat den Fehler behoben! Jetzt bekomme ich einen segfault nach der Ausführung der Zeile scanf ("% d% f% s", & tempptr-> alter, & tempptr-> gpa, & tempptr-> name); Weißt du, was das Problem sein könnte? Entschuldigung, neu in C – throwawayguy

+0

Dies ist ein anderes Problem. –

+0

Ich weiß, dachte ich könnte fragen, da es scheint ziemlich klein zu sein – throwawayguy