繁体   English   中英

C 问题结构列表

[英]C problems list of structures

我有以下结构

struct jucator{
    char nume[100];
    int *salariu;
    struct jucator *urm;
};

struct echipa{
    char nume[100];
    struct jucator *jc;
    struct echipa *urm;
};

struct echipa *ech;

void adaugajuc(char nume[100],char echipa[100],int salariu)
{
    struct echipa *e=ech;
    while(e)
    {
        if(strcmp(e->nume,echipa)==0) break;
        e=e->urm;
    }
    if(e->jc==NULL)
    {
        e->jc=(struct jucator *)malloc(sizeof(struct jucator *));

        *(e->jc->salariu)=salariu;
        e->jc->urm=NULL;
        strcpy(e->jc->nume,nume);
    }
    else{

        struct jucator *jc=e->jc;

        while(jc->urm&&jc->urm->salariu>salariu) jc=jc->urm;

        if(jc==e->jc&&jc->salariu<salariu)
        {
            struct jucator *nod=(struct jucator *)malloc(sizeof(struct jucator *));

            *(nod->salariu)=salariu;
            nod->urm=jc;
            strcpy(nod->nume,nume);
            e->jc=nod;
        }
        else{

            if(jc!=e->jc&&!jc->urm&&jc->salariu>salariu)
            {
                struct jucator *nod=(struct jucator *)malloc(sizeof(struct jucator *));

                *(nod->salariu)=salariu;
                nod->urm=NULL;
                strcpy(nod->nume,nume);
                jc->urm=nod;
            }
            else{

                struct jucator *nod=(struct jucator *)malloc(sizeof(struct jucator *));

                *(nod->salariu)=salariu;
                nod->urm=jc->urm;
                jc->urm=nod;
                strcpy(nod->nume,nume);
            }
        }
    }
} 

我在函数中添加元素。问题是,如果我不将*salariu放在第一个结构中而只salariu ,则在salariu会有具有奇怪值的salariu
我的问题是为什么?
我指定每个变量都是 global 。
我根据salariu降序排列它们。
也请解释一下,为什么它会像这样工作并且没有指针我会得到奇怪的值(并非总是如此)。

salariu是一个指向int的指针:

struct jucator{
    char nume[100];
    int *salariu;
    struct jucator *urm;
};

但是您正在分配一个普通的int而不取消引用(并且没有存储值的空间):

void adaugajuc(char nume[100],char echipa[100],int salariu)
{
struct echipa *e=ech;
while(e)
{
    if(strcmp(e->nume,echipa)==0) break;
    e=e->urm;
}
if(e->jc==NULL)
{
    e->jc=(struct jucator *)malloc(sizeof(struct jucator *));
    e->jc->salariu=salariu; /*HERE */

和这里:

demo.c:42:36: warning: comparison between pointer and integer
     while(jc->urm&&jc->urm->salariu>salariu) jc=jc->urm;
                                    ^
demo.c:44:30: warning: comparison between pointer and integer
     if(jc==e->jc&&jc->salariu<salariu)
                              ^
demo.c:48:21: warning: assignment makes pointer from integer without a cast
         nod->salariu=salariu;
                     ^
demo.c:55:44: warning: comparison between pointer and integer
         if(jc!=e->jc&&!jc->urm&&jc->salariu>salariu)

您可以解决此取消引用指针的问题:

e->jc->salariu = malloc(sizeof(int)); /* Reseve space for the int */
*(e->jc->salariu)=salariu;

或者更好的是,在struct使用一个普通的int

struct jucator{
    char nume[100];
    int salariu;
    struct jucator *urm;
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM