存储后的代码打印元素:
void print(struct node* root)
{
while ( c != NULL )
{
printf( "\n%d ", c->line1);
printf( "%s", c->curr );
c = c->next;
}
}
打印方法
答案 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;
}