2012-10-20 58 views
2

在此程序中,我想定義一個名爲person的結構,並在元素的未使用空間中插入一個元素的插入函數作爲類型的人。最後,我想將結果打印爲標準輸出。任何人都可以給我一個正確的錯誤提示嗎?乾杯聲明結構類型,將值插入到該類型的數組中,並打印輸出數組

錯誤:

arrays.c:16:22: error: expected ')' before '[' token 
arrays.c: In function 'main': 
arrays.c:34:5: warning: implicit declaration of function 'insert' 
arrays.c:41:5: warning: format '%s' expects type 'char *', but argument 2 has type 'char **' 

代碼

#include <stdio.h> 

/* these arrays are just used to give the parameters to 'insert', 
    to create the 'people' array */ 
char *names[7]= {"Simon", "Suzie", "Alfred", "Chip", "John", "Tim", 
      "Harriet"}; 
int ages[7]= {22, 24, 106, 6, 18, 32, 24}; 


/* declare your struct for a person here */ 
typedef struct{ 
    char name; 
    int ages; 
} person; 

static void insert (p[], char *name, int ages) { 

    static int nextfreeplace = 0; 
    /* put name and age into the next free place in the array parameter here */ 
    person p[0] = {&name, age}; 

    /* modify nextfreeplace here */ 
    nextfreeplace++; 

} 

int main(int argc, char **argv) { 

    /* declare the people array here */ 
    person p[7]; 

    //insert the members and age into the unusage array. 
    for (int i=0; i < 7; i++) { 
    insert (p[i], &names[i], ages[i]); 
    p[i]= p[i+1]; 

    } 

    /* print the people array here*/ 
    for (int i=0; i < 7; i++) { 
    printf("%s is %d years old\n", &names[i], ages[i]); 
    } 

    return 0; 
} 
+0

'nextfreeplace'變量的位置是可疑的。您需要知道數組中有多少行(這是變量記錄的內容),用於循環數據等,並刪除它們。除了當前的問題,您可能需要使其更加明顯。此外,你將無法清空數組;你也不能有兩個單獨的由該函數管理的人員陣列。 –

回答

2

你必須與參數p一個問題。

static void insert (p[], char *name, int ages) 

你忘記它的類型(person)。然後你重新聲明它;以下指令無效:

person p[0] = {&name, age}; 

在函數調用中,您不使用數組,而是使用數組的情況。所以,你的功能應該是:

typedef struct 
{ 
    char *name; 
    int ages; 
} person; 

static void 
insert (person *p, char *s, int n) 
{ 
    p->name = s; 
    p->ages = n; 
} 

和呼叫:

insert (&p[i], names[i], ages[i]); 
3

第一個問題是你的結構的人。您聲明的名稱爲char,而它應該是char *(指針)char [](array)

typedef struct 
{ 
    char *name; //or char name[100]; 
    int age; 
} 
person; 

接下來,您插入功能有不正確的參數。你不想要一組人(你可以做到這一點,但這很簡單),你想要一個指針指向一個人struct,所以你可以編輯它。

static void insert(person *p, char *name, int age) 
{ 
    p->name = name; 
    p->age = age; 
} 

最後,這是你將如何填充您的陣列,並打印出來:

int main() 
{ 
    //names and ages... 

    person people[7]; 

    for (int i = 0; i < 7; i++) 
    { 
     insert(&people[i], names[i], ages[i]); 
    } 

    for (int i = 0; i < 7; i++) 
    { 
     printf("name: %s, age: %i\n", people[i].name, people[i].age); 
    } 
} 

例子:http://ideone.com/dzGWId