我创建了以下链接列表,该列表从文件中读取数据,然后动态地将值分配给链接列表(例如,通过在全名中提供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;
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 (passenger==NULL) /*elegxos orthis desmeysis mnimis*/
{
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;
}
}
}
}
int main()
{
PASSENGERS *passenger, *tmp, *start=NULL;
readfile(platenr,&numberofseats, passenger,tmp, start);
tmp=start;
while(tmp!=NULL)
{
printf ("%s",tmp->fullname);
tmp=tmp->next;
}
}
答案 0 :(得分:1)
在Main的一侧,您将start
作为指针传递。然后,您在函数start
内更改readfile
的值。 main中的变量start
和start
中的变量readfile
不是同一个变量。要使此代码生效,您需要通过引用传递。
如上所述,代码将不会打印任何内容,因为main内部的start值不会发生变化。
某些编译器会让您执行以下操作...
readfile( ... , PASSENGERS *& start)
然后,上面的代码会将start
中的变量main
和start
中的变量readfile
设为相同的变量。
如果您的编译器不喜欢那样,那么您需要将指针传递给指针。
readfile( ... , PASSENGERS ** pStart)
然后在你的函数内部声明并设置启动这样的东西
PASSENGERS * start = *pStart;
干杯