Hey guys my assignment is to use link list and take numbers from a infile and print out and sort the numbers. My code is below. I have done everything except I am not sure why Its printing out a zero before my numbers...well I might know but I don't know how not to print it out. Any advice?



-----------------------------------------whole code-----------------------------------------------

Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

/* --------------------------------------------------------------------- */

struct NumNodeType
{
	int dat;
	struct NumNodeType *next;
};

/* Define new type names:  BaseElem   and   BasePtr   
 * to refer to the list nodes.  These new names can
 * be used in place of struct NumNodeType and
 * struct NumNodeType *  repsectively.
 */
typedef struct NumNodeType BaseElem;
typedef struct NumNodeType * BasePtr;


/* --------------------------------------------------------------------- */

BasePtr GetNode( int val )
{
	BasePtr node;
	node = malloc( sizeof(BaseElem) );
	node->dat = val;
	node->next = NULL;
	return node;	
}


int Length( BasePtr first )
{
	BasePtr move;
	int len=0;
	move = first;
	while (move != NULL)
	{
		len++;
		move = move->next;
	}
	return len;
}


void PrintNode( BasePtr node )
{
	printf("Val: %d\n", node->dat);
}



void PrintList( BasePtr first )
{
	BasePtr move;
	move = first;
	while (move != NULL)
	{
		PrintNode( move );
		move = move->next;
	}
}

void PrintNodeFile( FILE *ofp, BasePtr node )
{
	fprintf(ofp, "Val: %d\n", node->dat);
}

void PrintListFile( FILE *ofp, BasePtr first )
{
	BasePtr move;
	move = first;
	while (move != NULL)
	{
		PrintNodeFile( ofp,  move );
		move = move->next;
	}
}

int Compare( int x, int y)
{
	if (x < y) return -1;
	else if (x == y) return 0;
	else if (x > y) return 1;
}

BasePtr FindInsLoc( BasePtr first, BasePtr node )
{
	BasePtr move, prev;
	int val1, val2;
	int res = -1;
	val2 = node->dat;
	move = first;
	prev = move;

	val1 = move->dat;
	res = Compare( val1, val2 );

	while ( res < 0 && move != NULL)
	{
		prev = move;
		move = move->next;
		if (move != NULL)
		{
			val1 = move->dat;
			res = Compare( val1, val2 );
		}
	}	
	return prev;
}

BasePtr InsertNodeAfter( BasePtr first, BasePtr loc, BasePtr node)
{
	//printf("Insert %d after %d\n", node->dat, loc->dat);
	node->next = loc->next;
	loc->next = node;
	return first;
}


/* --------------------------------------------------------------------- */

int main( int argc, char *argv[] )
{
	BasePtr head, tail, tmp;
	int i;

	FILE *infile, *outfile;
	/* verify that 2 parameters were passed */	
	if ( argc != 3)
	{
		printf("Usage: a.out infile outfile\n");
		return 1;
	}
	/* open input file */
	infile = fopen( argv[1], "r");
	if (!infile)
	{
		printf("ERROR: file %s not available\n", argv[1]);
		return 1;	
	}
	/* open output file */
	outfile = fopen( argv[2], "w");
	if (!outfile)
	{
		printf("ERROR: file %s not available\n", argv[2]);
		return 1;	
	}
     /*
	tmp = GetNode(1);
	head=tmp;
	tail=tmp;

	for (i = 2; i <= 7; ++i)
	{
		 
		tmp = GetNode(i);
		tail->next = tmp;
		tail = tmp;
	}

	PrintList( head );

	fprintf(outfile, "Starting --\n");
	PrintListFile(outfile, head );
	fprintf(outfile, "Stopping --\n");
	i = Length( head );
	printf("List size: %d\n", i); 

     */
	/* now make it work some some random data; the above
	 * code is a test case in a controlled situation to make
	 * sure things appear to work
	 */
  /* insertion sort */

	BasePtr start, p, add;
	int x;
	int length;
	
	tmp = GetNode(0);
	start=tmp;

	for (i = 0; i < 10; ++i)
	{
		if(fscanf(infile," %d", &x) !=1)
		{
		   break;
		   }
		printf("Adding node with data value %d\n", x); /* for debugging purpose */
		add = GetNode(x);
		p = FindInsLoc( start, add );
	    start = InsertNodeAfter( start, p, add );
	   
	}
    printf("\n Total number of nodes added = %d\n", i);
	printf("Sorted list ----- \n");
	PrintList( start );

	return 0;
}