• 04-01-2007
ATXFG
We have to write a program that has base 21 numbers in an infile and have it output it in a sorted list with it's decimal equivalent. Here is the code I have so far...

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: &#37;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);       /* insertion sort */     srand( time(0) );     BasePtr start, p, add;     int x;     tmp = GetNode(0);     start=tmp;     for (i = 1; i < 10; ++i)     {         x = rand() % 100 + 1;         //printf("Inserting %d\n", x);         add = GetNode(x);         p = FindInsLoc( start, add );         start = InsertNodeAfter( start, p, add );         //printf("Version %d: \n", i);         //PrintList( start );     }     printf("Sorted list ----- \n");     PrintList( start );     return 0; }```

Anyway, I am trying to do this part of the assignment (for the insertion sort)

# Input: File containing a list of Base 21 numbers

* Name of this file is supplied on the command line
* First element in file is number of entries
* You may assume all numbers have at most 4 digits

# Output File containing a sorted list of Base 21 numbers and the decimal equivalent

* Name of this file is supplied on the command line
* First element in file is number of entries
This program requires an infile and an outfile

Any help would be greatly appericated. thanks guys.
• 04-01-2007
quzah
So what part of what you're trying to do can't you figure out? How to open a file? How to read from a file? How to write to a file? How to get a name from the command line arguments?

Quzah.
• 04-01-2007
ATXFG
I am really not sure how to do any of that. I have always had the user enter numbers and scanned that into a variable and so forth, I have never really done this, with an infile and an outfile etc. Thanks for the reply.
• 04-01-2007
quzah
Read the FAQ. It covers working with command line arguments, working with files, and many other handy things.

Quzah.