gpt4 book ai didi

c - 链表初始化

转载 作者:行者123 更新时间:2023-11-30 15:01:51 24 4
gpt4 key购买 nike

我正在尝试通过使用链接列表来更新我之前练习的程序,以了解它们是如何工作的。我有一个 txt 文件,其中包含公共(public)汽车的座位数。读取这个bus.txt文件后,会为特定的链表和座位数动态分配内存。(例如45个座位)。我编写了以下代码,只是为了测试它是如何工作的,我试图将 A 放入每个乘客的全名中,0 代表电话号码等。当我尝试打印 45 个座位​​以查看它是否正常工作时,我得到一个无限循环,并且 A 会永远打印出来。我错过了什么?

#include <stdio.h>              
#include <string.h>
#include <stdlib.h>

int i,j,numberofseats,temp;
char platenr[8],selection;
char firstname[20],lastname[20];
char phone[11];
char *p;

typedef struct psg
{
char fullname[40];
unsigned short phonenr[10];
unsigned int seatnr;
struct psg *next
}PASSENGERS;


PASSENGERS* readfile(char *platenr, int *seatnr)
{
char buff[60];
FILE *businfo;
businfo = fopen ("bus.txt","r");
if (businfo == NULL)
{
printf("Error Opening File, check if file bus.txt is present");
exit(1);
}
else
{
fscanf(businfo,"%s %d",platenr, seatnr);
printf("Bus Licence plate Nr is: %s, and Number of Seats is: %d", platenr, *seatnr);
PASSENGERS *p = malloc(*seatnr * sizeof(PASSENGERS));
if (p==NULL)
{
puts("Unable to allocate memory");
exit(1);
}
return p;
}

}



int main()
{
PASSENGERS *passenger, *tmp, *start=NULL;
passenger = readfile(platenr,&numberofseats);
for (i=0;i<numberofseats;i++)
{
passenger->next=NULL;
strcpy (passenger->fullname,"A");
passenger->seatnr=i+1;
for (j=0;j<10;j++)
passenger->phonenr[j]=0;
if (start==NULL)
start=passenger;
else{
tmp=start;
while (tmp->next !=NULL) tmp=tmp->next;
tmp->next=passenger;
}
}
tmp=start;
while(tmp!=NULL)
{
printf ("%s",tmp->fullname);
tmp=tmp->next;
}
}

最佳答案

谢谢大家!我已经更改了我的代码,根据您的评论使其成为链接列表,并且它在函数之外工作。但是,当尝试将其传递到函数内部时,我仍然遇到一些问题..

#include <stdio.h>              
#include <string.h>
#include <stdlib.h>
int i,j,numberofseats,temp;
char platenr[8],selection;
char firstname[20],lastname[20];
char phone[11];
char *p;

typedef struct psg {
char fullname[40];
unsigned short phonenr[10];
unsigned int seatnr;
struct psg *next
}PASSENGERS;

void readfile(char *platenr, int *seatnr, PASSENGERS passenger,PASSENGERS tmp, PASSENGERS start)
{
char buff[60];
FILE *businfo;
businfo = fopen ("bus.txt","r");
if (businfo == NULL)
{
printf("Error Opening File, check if file bus.txt is present");
exit(1);
}
else
{
fscanf(businfo,"%s %d",platenr, seatnr);
printf("Bus Licence plate Nr is: %s, and Number of Seats is: %d", platenr, *seatnr);
for (i=0;i<numberofseats;i++)
{
passenger = (PASSENGERS *) malloc (sizeof(PASSENGERS));
if (p==NULL)
{
puts("Unable to allocate memory");
exit(1);
}
passenger->next=NULL;
strcpy (passenger->fullname,"A");
passenger->seatnr=i+1;
for (j=0;j<10;j++)
passenger->phonenr[j]=0;
if (start==NULL)
start=passenger;
else{
tmp=start;
while (tmp->next !=NULL) tmp=tmp->next;
tmp->next=passenger;
}
}
tmp=start;
while(tmp!=NULL)
{
printf ("%s",tmp->fullname);
tmp=tmp->next;
}

return p;
}

}



int main()
{
PASSENGERS *passenger, *tmp, *start=NULL;
readfile(platenr,&numberofseats, passenger, tmp, start,);

}

关于c - 链表初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41229079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com