我有以下代码:
Price *ptr=NULL;
Price *ptr1 = ptr;
ptr_file =fopen(pvalue,"r");
if (!ptr_file)
exit(1);
while ((c=fgetc(ptr_file))!=EOF)
{
if(c==',' && flag==2)
{
temp_price[i] = ' ';
i = 0;
flag = 0;
ptr->Price = atoi(temp_price);
ptr->sold_cpy=0;
}
if(flag == 2)
temp_price[i++]=c;
if(c==',' && flag == 1)
{
ptr->BookId[i++]=' ';
i=0;
flag=2;
}
if(!fflag)
{
ptr = (Price*) malloc (sizeof(Price));
if (ptr==NULL)
exit (1);
flag=1;
fflag=1;
}
if(flag == 1)
ptr->BookId[i++] = c;
if(c=='n')
{
ptr = ptr->Next_Price;
ptr = (Price*) malloc (sizeof(Price));
if (ptr==NULL)
exit (1);
flag =1;
}
}
ptr->Next_Price = NULL;
fclose(ptr_file);
for(ptr = ptr1;ptr!=NULL;ptr=ptr->Next_Price)
printf("%s %d %dn",ptr->BookId,ptr->Price,ptr->sold_cpy);
问题是这些值被正确地分配给了ptr,但没有分配给ptr1。我已经用ptr1指出了节点的开头:
Price *ptr1 = ptr;
以下是结构定义:
typedef struct Price_ Price;
struct Price_{
char BookId[20];
int Price;
int sold_cpy;
Price * Next_Price;
};
我受够了出了问题。。知道吗??
您还没有创建链表,代码中有很多问题:
就拿这个吧:
您在这里检索下一个链接的指针,它从未设置,包含垃圾:
ptr = ptr->Next_Price;
在这里,您可以放弃该值,为下一个节点分配空间,但从不将其作为链接存储在上一个节点中:
ptr = (Price*) malloc (sizeof(Price));
切换顺序:
ptr->Next_Price = (Price*) malloc (sizeof(Price));
ptr = ptr->Next_Price;
另一个问题是:您试图存储头节点(Price *ptr1 = ptr;
),但此时ptr
为NULL。
选择一个调试器,并逐步完成您的程序。在未来的某个时刻,你应该能够在脑海中做同样的事情(或者用纸和铅笔),但现在看起来你正在为一些基本概念而挣扎。。。因此,将现实与您的程序所做的事情进行比较的最好方法是在调试器中运行它。