簡體   English   中英

結構函數不適用於我的數組

[英]Struct function doesn't work with my array

因此,我基本上有了一個結構,該結構的名稱必須是可區分的,並帶有一個ID。 我認為它可能看起來像這樣。

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

現在,我將以給定的開始編寫一個函數:

person *readData();

結構和名稱都必須是可分辨的,我想使用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在該函數中表示,“人員”必須為union或struct類型。 任何快速輸入? 因為我剛開始學習它,所以它只是基本的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);

}

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

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

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

您的函數readData不了解您的人員數組。 如果按照以下方式重寫它:

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

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

它應該更好。

請參閱zavgs答案以獲取更多改進的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM