Hey guys,
I am writing a code using linked lists, and everything seems to be working fine, other than the fact that although I want my head to be pointing to the first node, it points to the second node. The code is here...
Am I doing something wrong in the header>if (*head==NULL) section?
This is the driver file
Code:
/* Nathan Berliner
9/28/2011
prelab5.c file
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"prelab5.h"
int main (int argc, char *argv[])
{
char * movieFile;
char * runFile;
FILE* pFile1;
FILE* pFile2;
int count;
char title [100];
int release;
char director[100];
float rating;
int minute;
int second;
listnode head=NULL;
//will need to use comand line to get #dvds
//takes the users input from the comand line, proper usage is ./a.out file row column
movieFile=argv[1];
runFile=argv[2];
//opens the file to read only
pFile1 =fopen(movieFile, "r");
pFile2=fopen(runFile, "r");
//will return a pointer, if null, says program can't be used
//if valid, it will be opened
if (pFile1 == NULL)
{
printf("Error, file not opened");
}
if (pFile2 == NULL)
{
printf("Error, file not opened");
}
if (pFile1 && pFile2 != NULL)
{
printf("opened\n");
int i;
for(i=0; i<=11; i++)
{
fscanf(pFile1, "%s%d%s%f", title, &release, director,&rating);
fscanf(pFile2, "%d%d", &minute, &second);
makeList(&head, title, release, director, rating, minute, second);
}
printf("-----------\n");
prints(head);
}
return 0;
}
And here is the header file
Code:
/* Nathan Berliner
prelab5.h
*/
//structure definitions
struct movie_runtime
{
int minutes;
int seconds;
};
typedef struct movie_runtime runtime;
typedef struct movielist
{
char title[100];
int release;
char director[100];
float rating;
struct movielist *next;
runtime timeData;
} movie;
typedef movie * listnode;
void makeList(listnode * head, char* title, int release, char* director, float rating, int minute, int second)
{
listnode tail;
if(*head==NULL)
{
printf("head\n");
tail=(listnode)malloc(sizeof(movie));
strcpy(tail->title,title);
tail->release=release;
strcpy(tail->director,director);
tail->rating=rating;
tail->timeData.seconds=second;
tail->timeData.minutes=minute;
tail->next=NULL;
*head=tail;
}
else
{
printf("Else\n");
tail->next=(listnode)malloc(sizeof(movie));
strcpy(tail->title,title);
tail->release=release;
strcpy(tail->director,director);
tail->rating=rating;
tail->timeData.seconds=second;
tail->timeData.minutes=minute;
tail->next->next=NULL;
tail=tail->next;
}
}
void prints(listnode head)
{
listnode temp=NULL;
for(temp= head; temp != NULL; temp =temp->next)
{
printf("%s\n%d\n%s\n%f\n%d\n%d\n\n", temp->title, temp->release, temp->director,temp->rating, temp->timeData.minutes, temp->timeData.seconds);
}
printf("+++++++++++");
}