我有以下代码:
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] = '\0';
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++]='\0';
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 %d\n",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;
};
我厌倦了出了什么问题......有什么想法?
答案 0 :(得分:0)
您尚未创建链接列表,代码中存在许多问题:
请选择这个:
你在这里检索下一个链接的指针,它从未设置,包含垃圾:
ptr = ptr->Next_Price;
在这里您丢弃该值,为下一个节点分配空间,但您从未将其存储为上一节点中的链接:
ptr = (Price*) malloc (sizeof(Price));
切换订单:
ptr->Next_Price = (Price*) malloc (sizeof(Price));
ptr = ptr->Next_Price;
在beginng处的另一个问题:您尝试存储头节点(Price *ptr1 = ptr;
),但此时ptr
为NULL。
选择一个调试器,然后逐步完成您的程序。在未来的某个时刻,你应该能够在头脑中做同样的事情(或者用纸和铅笔),但看起来就像你正在努力解决一些基本概念......所以最好的方法来比较现实与你认为你的程序所做的就是在调试器中运行它。