Now you can combine what you know about command-line arguments
with what you know about opening files so as to supply a file name to a
program that actually reads from the file. For example, the following,
revised version of analyze_trades
works on a command-line argument,
rather than on a wired-in file name:
#include/* Define the trade structure */ struct trade {double price; int number;}; /* Define value-computing function */ double trade_price (struct trade *tptr) { return tptr -> price * tptr -> number; } /* Define trade array */ struct trade *trade_pointers[100]; main (int argument_count, char **argument_array) { /* Declare various variables */ int limit, counter, number; double price, sum = 0.0; /* Declare trade_source, a pointer to a file-describing structure */ FILE* trade_source; /* Prepare a file-describing structure for reading */ trade_source = fopen (argument_array[1], "r"); /* Read numbers from the file and stuff them into array */ for (limit = 0; 2 == fscanf (trade_source, "%lf%i", &price, &number); ++limit) { trade_pointers[limit] = (struct trade*) malloc (sizeof (struct trade)); trade_pointers[limit] -> price = price; trade_pointers[limit] -> number = number; } /* Close source file */ fclose (trade_source); // Analyze data }