/* DFStermole 23 Feb 00
   Reading data from a file into an array of structs
   & Printing data from the array of structs
     using conversion from float to string to avoid leading zero
*/
#include <stdio.h>

struct player_s
{
   char name[20];
   char bats;
   char throws;
   char position[8];
   int AB;
   int HR;
   int hits;
   float avg;
};

main( argc, argv)
int argc;
char *argv[];
{
   struct player_s player[25];
   char avgstr[10];
   int i;
   int howmany;
      
   char inputfile[80];
   FILE *fpin; /* input file struct pointer */

   /* GET FILE NAME FROM COMMAND LINE OR ASK USER FOR IT */
   if( argc != 2)
   {
      printf("What data file do you want to use? ");
      scanf("%s", inputfile);
   }
   else {
      strcpy(inputfile, argv[1]);
   }

   /* OPEN THE FILE */
   fpin = fopen(inputfile, "r");
   if( !fpin )
   {
      printf("File %s was not found.\n", inputfile);
      exit(0);
   }

   /* GET # OF PLAYERS */
   fscanf(fpin, "%d\n", &howmany); 

   /* READ IN PLAYER DATA */
   for ( i = 0; i < howmany; i++)
   {
      fgets( player[i].name, 20, fpin);
      if ( player[i].name[strlen(player[i].name) - 1] == '\n')
         player[i].name[strlen(player[i].name) - 1] = '\0';
      fscanf(fpin, "%c\n", &player[i].bats);
      fscanf(fpin, "%c\n", &player[i].throws);
      fscanf(fpin, "%s\n", player[i].position);
      fscanf(fpin, "%d\n", &player[i].AB);
      fscanf(fpin, "%d\n", &player[i].HR);
      fscanf(fpin, "%d\n", &player[i].hits);
      /* CALC BATTING AVERAGE */
      player[i].avg = (float)player[i].hits / player[i].AB;
   }
   fclose(fpin);

   /* PRINT TABLE HEADER */
   printf("                    1960 Pittsburgh Pirates\n");
   printf("Player            Bats Throws Pos  AB   HR   Hits   Avg\n");

   /* PRINT TABLE BODY */
   for ( i = 0; i < howmany; i++)
   {
      printf("%-18s%-5c%-7c%-4s%4d%4d%6d",
         player[i].name, player[i].bats, player[i].throws,
         player[i].position, player[i].AB, player[i].HR, player[i].hits);
      sprintf(avgstr, "%.3f", player[i].avg);
      strcpy(avgstr, &avgstr[1]);
      printf("%7s\n", avgstr);
   }
}

