元素存储

时间:2015-09-03 06:19:16

标签: c

存储后的代码打印元素:

void print(struct node* root)
{

    while ( c != NULL ) 
    {
        printf( "\n%d ", c->line1);

        printf( "%s", c->curr );
        c = c->next;    
    }
}

打印方法

2 个答案:

答案 0 :(得分:0)

只看代码,这条线似乎是一个潜在的问题:

    temp->curr=current_input; 

看起来所有节点.curr都会得到set = current_input。我猜你需要做类似的事情:

    temp->curr = malloc(1 + strlen(current_input));
    strcpy(tmp->curr, current_input);

如果strcpy导致警告,请使用strcpy_s。

答案 1 :(得分:0)

首先,您应该意识到列表包含节点,其中包含您的数据片段 - 因此您需要为要存储在列表中的每个数据分配一个新节点。

然后将每个新创建的节点插入列表,最后在完成后打印列表。

另外请记住,数据需要复制到节点(如line1)或复制其他地方,例如复制到堆上,然后链接带有指针的节点,如curr(请参阅the answer @rcgldr)。

struct node *root = NULL;

struct node *createnode(int line, const char *input)
{
    struct node *n = malloc(sizeof(struct node));
    if(n != NULL)
    {
        n->line1 = line;
        n->curr  = input;
        n->next  = NULL;
    }
    return n;
}

void insertnode(struct node* n)
{
    n->next = root;
    root = n;
}

void printlist(struct node* n)
{
    for( ; n != NULL; n = n->next)
    {
        printf( "%d: %s\n", n->line1, n->curr);
    }
}

int main(int argc, const char * argv[]) 
{
    char *input;
    struct node *temp;
    type t;

    do
    {
        t=getword(); //call to get the type of t

        switch (t) 
        {
        case number:
        case keyword:
            input = strdup(current_input);      // make a copy of user input
            if(input != NULL)
            {
                temp = createnode(line, input);
                if(temp != NULL)                // created?
                    insertnode(temp);           // insert into the list
                else
                {
                    free(input);                // free unused input copy
                    t = EOF;                    // make the loop terminate
                }
            }
            else                                // user input copy failed
                t = EOF;                        // make the loop terminate
            break;

        default:
            break;
        }   
    }
    while (t != EOF);

    print(root);

    return 0;   
}