2016-12-19 66 views
-1

我创建了下列链接列表,它从文件中读取数据,然后动态地将值分配给链接列表(例如,通过在全名中提供A来初始化它)我希望列表成为功能外可用,但我想我有一个问题存在。 通过尝试打印列表内主,我有什么.. 我的代码如下C和函数中的链接列表

#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

需要注意的是[多余的,有潜在危险的投malloc和朋友的结果在C](http://stackoverflow.com/q/605845/253056)。 –

+0

乍一看,请确保你的新行是你的'printf',否则缓冲区将不会被刷新:'printf(“%s \ n”,tmp-> fullname);' –

+0

请发布你到目前为止的输出结果。 –

回答

1

在主要的方面,你传递start作为指针。然后在函数readfile内更改start的值。主变量start和变量startreadfile不是相同的变量。为了这个代码的工作,你需要通过引用传递。

由于写入代码将不会打印任何内容,因为main内的start值不会更改。

一些编译器可以让你做到以下...

readfile(... , PASSENGERS *& start)

上面的代码将随后作出main变量startreadfile变量start相同的变量。

如果你的编译器不喜欢,那么你需要传递一个指针指针。

readfile(... , PASSENGERS ** pStart)

然后你的函数声明中,并设置开始像这样

PASSENGERS * start = *pStart;

干杯