【问题标题】:Structur Pointer C结构指针 C
【发布时间】:2021-04-11 23:14:03
【问题描述】:

我知道我肯定误解了如何再次使用指针。所以这是我的代码。如果你们都可以帮助我,那就太好了。程序很简单。您将值写入结构数组并打印出来。即便如此,如果有人能向我解释何时使用双指针以及如何使用它们,那就太好了。

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

#define MAXA 3

typedef enum{
    FOOD,
    ART,
    OTHERS
}TKindOfArticle;

typedef struct{
    int number;
    char description[31+1];
    int sellingGrossPrice;
    int vat;
    int minimumStockLevel;
    TKindOfArticle kindOf;
}TArticle;

void readOneArticle(TArticle* arti);
int readMaxArticle(TArticle* arti[]);
void printfOneArticle(TArticle arti);
void printfMaxArticle(TArticle *arti[],int read);

int main()
{
    TArticle arti[MAXA];
    int howMany;
    howMany = readMaxArticle(&arti);
    printfMaxArticle(&arti,howMany);


    return 0;
}

void readOneArticle(TArticle* arti){
    printf("Number: ");
    scanf("%d", &(arti->number));
    printf("Descrip: ");
    scanf("%s", &(arti->description));
    printf("SellGrossPrice: ");
    scanf("%d",&(arti->sellingGrossPrice));
    printf("MinimumStock: ");
    scanf("%d",&(arti->minimumStockLevel));
    printf("Kind of article (0: Food, 1: Art, 2: Others): ");
    scanf("%d",&(arti->kindOf));

    if(arti->kindOf == FOOD){
        arti->vat= arti->sellingGrossPrice*1.1;
    } else if(arti->kindOf == ART){
        arti->vat= arti->sellingGrossPrice*1.13;
    }else if(arti->kindOf == OTHERS){
        arti->vat= arti->sellingGrossPrice*1.2;
    }
}

int readMaxArticle(TArticle* arti[]){
    int read;
    int i=0;

    printf("Max Elements (max. 3): ");
    scanf("%d",&read);
    
    if(read>MAXA){
        printf("Error");
    } else{
        for(i=0; i<read;i++){
            readOneArticle(arti[i]);
            printf("\n");
            printf("Number: %d\nDescrip.: %s\nSell Gross: %d\nVat: %d\nMin. Stock: %d\n",
           (*arti[i]).number,(*arti[i]).description,
           (*arti[i]).sellingGrossPrice,(*arti[i]).vat,(*arti[i]).minimumStockLevel);
        }

    }
    return read;
}

void printfOneArticle(TArticle arti){
    printf("Number: %d\nDescrip.: %s\nSell Gross: %d\nVat: %d\nMin. Stock: %d\n",
           arti.number,arti.description,
           arti.sellingGrossPrice,arti.vat,arti.minimumStockLevel);

    switch(arti.kindOf){
        case 0: printf("Kind: Food\n");
                break;
        case 1: printf("Kind: Art\n");
                break;
        case 2: printf("Kind: Others\n");
                break;
    }
}

void printfMaxArticle(TArticle *arti[],int read){
    if(read>MAXA){
    } else{
        for(int i=0; i<read;i++){
            printfOneArticle(*arti[i]);
            printf("\n");
        }
    }
}

【问题讨论】:

  • 编译程序你有很多警告和错误在程序中

标签: c pointers structure


【解决方案1】:

您正在创建一个结构数组:TArticle arti[MAXA]; 但是当您调用readMaxArticle(&amp;arti) 函数时,您会将指针传递给TArticle 的数组。 TArticle *arti[] 读起来像这样 - arti 是指向 TArticle 的指针数组。但是您想将指针传递给TArticle 的数组。无论如何它不会编译。

错误:无法将“TArticle (*)[3]”转换为“TArticle**”

您可能想查看how to read C declaration,如果您想练习访问this 站点。

【讨论】:

    猜你喜欢
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多