2012-01-10 44 views
1
#include <stdio.h> 
main() 
{ 
    typedef struct{ 
     char *name; 
     int age; 
    }person[5]; 

    int i; 
    for (i=0;i<5;i++){ 
     printf ("name:"); 
     scanf("%s",person[i].name); 
     printf("\nage:"); 
     scanf("%d",&person[i].age);} 

    for (i=0;i<5;i++){ 
     printf ("person:%d",i); 
     printf ("name:%s",person[i].name); 
     printf ("age:%d",person[i].age); 
    } 
} 

這是我的示例程序。但編譯時,我不斷收到錯誤「預期表達式在10,12,16和17行之前的人嗎?我做錯了什麼?我在這段代碼中做錯了什麼?

+1

如果您正確縮進代碼,應該會看到問題。 – 2012-01-10 15:11:32

回答

5

要修復語法錯誤,請刪除typedef關鍵字(您試圖聲明一個變量,而不是一個類型)

更重要的是,更改爲:

typedef struct{ 
    char *name; 
    int age;} Person; 

Person person[5]; 

此外,下列哪項是錯誤:

scanf("%s",person[i].name); 

你需要網絡連接首先爲person[i].name分配內存(例如,使用malloc())。

最後,在下面的行的%s格式說明不正確:

printf ("age:%s",person[i].age); 
+0

修復了問題中的%s ..這是一個錯字。 我想我現在得到的重點..但你能解釋一些內存分配部分..我想我得到了一個分段錯誤,因爲它現在 – tarashish 2012-01-10 15:33:34

+1

@unussunu:爲了這個練習的目的,可能是最簡單的要做的事情是把'char * name'改成'char name [50]'(其中'50'是包含NUL終止符的字符串的最大長度)。 – NPE 2012-01-10 15:36:29

2

person是一種類型的,而不是一個對象。您不能將「scanf()」轉換爲類型:person「。

我只是簡單地刪除typedef,只是將結構定義留在main的主體之外;並在裏面創建一個對象

struct person { /* ... */ }; 

int main(void) { 
    struct person person[5]; 
    /* ... */ 
    return 0; 
}