2014-01-09 51 views
1

所以我基本上有一個名稱的結構,它必須是dinamically和一個ID。我認爲它可以看起來像這樣。結構函數不能與我的數組一起工作

typedef struct { 
char *name; 
unsigned int id; 
} person; 

現在我要與給定的開始寫一個函數:

person *readData(); 

無論是結構和名稱必須dinamically,我想用malloc函數來做到這一點。對於所有人也應該有一個數組,我們將其命名爲「people [1000]」。

這裏是我與主要功能的說功能的嘗試:

int count = 0; 

person *readData() { 
    int i, len; 
    char puffer[1000]; 

    printf("Name: "); 
    scanf_s("%999s", &puffer); 

    len = strlen(puffer); 
    people[count].name = (char *)malloc((len + 1)*sizeof(char)); 

    for (i = 0; i < len; i++) 
     people[count].name[i] = puffer[i]; 

    people[count].name[len] = '\0'; 
} 

void main(void) 
{ 
    person *people[1000]; 
    readData(); 
    printf("\n%s\n", people[count].name); 
} 

嗯,這似乎並沒有這樣的。 Visual Studio在函數中說,「人員」必須是聯合或結構類型。 任何快速輸入?這只是基本的C,因爲我正在開始學習它。

編輯:全碼:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

typedef struct { 
char *name; 
unsigned int id; 

} person; 

person people[1000]; 

int count = 0; 

person *readData() { 
int i, len; 
char puffer[1000]; 
printf("Name: "); 
scanf_s("%999s", &puffer); 
len = strlen(puffer); 
people[count].name = (char *)malloc((len + 1)*sizeof(char)); 
for (i = 0; i < len; i++) 
    people[count].name[i] = puffer[i]; 
people[count].name[len] = '\0'; 


} 

void main(void){ 
readData(); 
printf("\n%s\n", people[count].name); 

} 
+0

你的指針('people')的陣列是本地'主()'功能,所以它'READDATA()'是不可能知道它沒有你傳遞它(或使其成爲全球)。你可能不是指'person * readData()',而是'void readData(person * people)'。儘管如此,你的代碼也包含很多其他問題。 – Jite

回答

2

people變量在您的readData函數的主體中未定義。 這就是編譯器因錯誤而失敗的原因。

  1. 您可以將變量傳遞給函數person *readData(person *people)。 不要忘記在main函數中將readData();更改爲readData(people);

  2. 如果您只需要一維數組,則不要將指針表示法與數組表示法混合使用。 使用person people[1000];而不是person *people[1000];

+0

感謝您的快速響應。 由於我沒有任何參數得到這個函數,我得到了其他人>與參數我想我應該沒有這樣做。 這是我現在的主要問題,這就是爲什麼我想讓「人物[1000]」全球化。 – iBaer

+0

只要在'main'函數體外聲明你的變量,如果你真的想這樣做的話。 – zavg

+0

即使有一個參數,我仍然在struct function中得到錯誤,我想說「people [count] .name」。關於count的錯誤說它必須是指向對象的指針類型。 您是否也有這方面的想法? – iBaer

0

你的功能READDATA不知道你的人數組。如果你沿着這些線改寫它:

void readData(person** people) { 
    your code 
} 

void main() { 
    person* people[100]; 
    readData(people); 
} 

它應該會更好。

請參閱zavgs答案以獲得更多改進內容。

+0

任何方式做它沒有參數? – iBaer

+0

@ user3177280並不容易。但參數有什麼問題? – glglgl

相關問題