我正在尝试使用链接列表制作库存程序,但是当我想显示我输入的数据列表时,我遇到了问题。 这是输入数据的代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
struct t_barang
{
char kode[9];
char nama[30];
int harga;
int stok;
};
struct l_barang
{
struct t_barang item;
struct l_barang *next;
};
int main(){
typedef struct l_barang *p_barang;
struct l_barang *head;
head=NULL;
int jumlah=0;
do{
printf("Input Jumlah barang = ");
scanf("%d", &jumlah);
if(jumlah == 0)
break;
else{
struct l_barang *baru = (struct l_barang*) malloc(sizeof(struct l_barang));
printf("Input Kode barang = ");
scanf("%s", &(baru->item).kode);
printf("Input nama barang = ");
scanf("%s", &(baru->item).nama);
printf("Input harga barang = ");
scanf("%d", &(baru->item).harga);
baru->item.stok=jumlah;
if(head == NULL){
baru->next=NULL;
head=baru;}
else{
struct l_barang *tail;
tail=head;
while(tail->next != NULL){
tail->next=NULL;
tail = baru;
}
}
}
}
while(jumlah != 0);
这是我用来显示数据的代码:
p_barang tampil = head;
while(tampil){
printf("%d\t%s\t%s\t%d\n",tampil->item.stok, tampil->item.kode, tampil->item.nama, tampil->item.harga);
tampil=tampil->next;}
谢谢你!
答案 0 :(得分:1)
问题可能来自这里:
tail=head;
while(tail->next != NULL){
tail->next=NULL;
tail = baru;
}
如果tail->next
不为NULL,则将其设置为NULL,然后更改tail
:这将触发内存泄漏和其他问题......
通常的方法是:
tail=head;
while(tail->next != NULL){
tail=tail->next;
}
//tail is now the end of the list
tail->next = baru;
baru->next=NULL;
//now, baru is the end of the list