2013-06-23 83 views
0

我想編寫簡單的程序來收集某些數量的學生的數據,並輸出到底。輸入一個學生的數據後,我的程序崩潰。簡單的指針結構

下面是代碼:

#include <stdio.h> 
#include <stdlib.h> 
typedef struct Student Student; 
struct Student{ 
    char name[20]; 
    char lastname[20]; 
    int age; 
}; 

main() { 
    int i; 
    int n; 
    scanf("%d",&n); 


    Student *pStudents = NULL; 
    pStudents = (Student*)malloc(n*sizeof(Student)); 

    for(i=0;i<n;i++) { 
     printf("Enter the students name: \n"); 
     scanf("%s",(pStudents+i)->name); 
     printf("Enter lastname: \n"); 
     scanf("%s",(pStudents+i)->lastname); 
     printf("Enter age: \n"); 
     scanf("%d",(pStudents+i)->age); 
    } 

    for(i=0;i<n;i++) { 
     printf("%s",(pStudents+i)->name); 
     printf("%s",(pStudents+i)->lastname); 
     printf("%d",(pStudents+i)->age); 
    } 

} 

在此先感謝。

+0

錯誤很明顯是scanf,但你爲什麼使用(pStudents + i)而不是pStudents [i]?它至少會表明pStudents是一個數組。 –

+0

沒錯。我忘了指針和數組一樣。我仍然對指針不熟悉,但這確實使代碼更易於閱讀。 – Jay

+0

將'NULL'賦值給'pStudents'它完全多餘; malloc()'覆蓋的返回值是立即的。 –

回答

5
scanf("%d",(pStudents+i)->age); 

scanf的參數必須是指針類型。

更改(pStudents+i)->age&(pStudents+i)->age

+0

作品!所以我假設 - >運營商是相同的。還可以解除引用? – Jay

+0

@你可以使用'''來訪問結構體變量的成員(例如'struct Student變量'),當你有一個指向結構體的指針時('struct Student * pointerVariable'),就可以使用' - >'。 –

+1

@Jay's-> a'是'(* s).a'的語法糖' – ouah