簡體   English   中英

使用malloc創建動態結構數組

[英]Creating dynamic struct arrays using malloc

我在創建動態結構數組時遇到問題。 問題是我從文件中讀取了內容,並且不允許在scanf之后初始化該結構。 問題是我想創建x個vinnareinfo類型的結構。 我可以補充一點,因為這是一個學校項目,所以我們只能使用C90。 真的很感謝那里的所有幫助! :D

#include <stdio.h>

struct vinnareinfo{
    char fornamn[20];
    char efternamn[20];
    int ar;
    };

main(){


struct vinnareinfo *vinnare;

int i = 0, x;
FILE *file;

file = fopen("C:\\Uppgifter.txt", "r");
if (file != NULL){
    fscanf(file, "%d", &i);
}
else{
    printf("Ange antal vinnare:");
    scanf("%d", &i);
    i = i - 1;



    for (x = 0; x < i; x++){
        printf("Ange år: ");
            scanf("%d", ??? )
        }
    }
}
#include <stdlib.h>
...

printf("Ange antal vinnare:");
scanf("%d", &i);
//i = i - 1;//remove

vinnare = malloc(i * sizeof(struct vinnareinfo));//check return value of malloc

for (x = 0; x < i; x++){
    printf("Ange ar: ");
    scanf("%d", &vinnare[i].ar);
}

為了使事情變得更容易和更具可讀性,請考慮為您的結構定義新的數據類型:

    typedef struct {
    char fornamn[20];
    char efternamn[20];
    int ar;
    }vinnareinfo;

您可以在這里找到有關它的更多有用信息

scanf("%d", &i);
vinnareinfo *v = (vinnareinfo*)malloc((i-1)*sizeof(vinnareinfo)); //allocated an array of i elements of type  vinnareinfo 

我希望這是您想要的。

if (fscanf(file, "%d", &i) != 1) {
    perror("fscanf");
    exit(1);
}

vinnare = malloc(sizeof(struct vinnareinfo) * i);
if (!vinnare) {
    perror("malloc");
    exit(1);
}

for (x = 0; x < i; x++) {
    int rc = fscanf(file, "%*s%*s%d",
        sizeof(vinnare->fornamn)-1,   &vinnare->fornamn,
        sizeof(vinnare->efternamn)-1, &vinnare->efternamn,
        &vinnare->ar);
    vinnare++;
    if (rc <= 0) {
        perror("fscanf");
        break;
    }
}

注意可能需要將fscanf格式化字符串中的'*'替換為'19',並刪除'sizeof(vinnare-> ...)-1'參數。 這適用於printf,但應該對scanf進行測試!

暫無
暫無

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

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