When you pass arrays, you simply refer to the names on the calling site:
numGames = getStats(date[][2], oppName[], inStats[][4]);
numGames = getStats(date, oppName, inStats);
In the called functions, you use (more or less) the notation you specified.
However, when your function accepts a multidimensional array, you must specify the sizes of the second and subsequent dimensions in the argument list of the function.
double compAvgTD(stat[][], numGames)
double compAvgTD(double stat[][4], int numGames)
main(), . , .
, ( ) main(). , main() - , , , Agile dictum: DRY .
" - "
, . .
- compAvgPts() , cmpAvgYds(), , , . , ; , ( ).
MacOS X 10.6.5 GCC 4.2.1 :
gcc -O -std=c99 -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes \
-Wold-style-definition xx.c -o xx
, main(); , .
#include <stdio.h>
#include <math.h>
#define MAXGAMES 15
#define AUSTATS "auPass2010.txt"
int getStats(int date[][2], char oppName[][64], double inStats[][4]);
void analysis(double inStats[][4], double outStats[][3], int numGames);
double compAvgCmp(double stat[][4], int numGames);
double compAvgAtt(double stat[][4], int numGames);
double compAvgYds(double stat[][4], int numGames);
double compAvgTD(double stat[][4], int numGames);
double compAvgPts(double stat[][4], int numGames);
int main(void)
{
int date[MAXGAMES][2];
char oppName[MAXGAMES][64];
double inStats[MAXGAMES][4];
double outStats[MAXGAMES][3];
double avgCmp, avgAtt, avgYds, avgTD, avgPts;
int numGames=0, r,c;
numGames = getStats(date, oppName, inStats);
printf("\t\t2010 AUBURN PASSING STATISTICS\n"
"DATE\tOPPONENT\t\tCMP\tATT\tYDS\tTD --\tAVEYDS\t%%CMP\tPTS\n"
"-----\t-------------\t----\t----\t----\n");
if (numGames <= 0)
printf("%s NO GAMES READ\n", AUSTATS);
else
{
analysis(inStats, outStats, numGames);
printf("%d\n", numGames);
for (r=0;r<numGames;r++)
{
for (c=0;c<=4;c++)
{
printf("%2d/%2d\t%s\t\t%5.0f\t%5.0f\t%5.0f\t%5.0f\t \t%6.1lf\t%6.1lf\t%5.0lf\n",
date[r][0], date[r][1], &oppName[r][0], inStats[r][0], inStats[r][1],
inStats[r][2], inStats[r][3], outStats[r][0], outStats[r][1], outStats[r][2]);
}
}
avgCmp = compAvgCmp(inStats, numGames);
avgAtt = compAvgAtt(inStats, numGames);
avgYds = compAvgYds(inStats, numGames);
avgTD = compAvgTD(inStats, numGames);
avgPts = compAvgPts(inStats, numGames);
printf("-----\t------------------\t----\t----\t-----\t---\t\t\t----\n");
printf("Season Averages\t\t\t%3.1f\t%3.1f\t%3.1f\t%3.1f\t\t\t%3.1f\n", avgCmp, avgAtt, avgYds, avgTD, avgPts);
}
return 0;
}
int getStats(int date[][2], char oppName[][64], double inStats[][4])
{
FILE *infile;
int n=0;
infile = fopen(AUSTATS, "r");
if (infile == NULL)
printf("%s FILE OPEN ERROR\n", AUSTATS);
else
{
while (fscanf(infile, "%d %d %63s %lf %lf %lf %lf",
&date[n][0], &date[n][1], oppName[n], &inStats[n][0], &inStats[n][1],
&inStats[n][2], &inStats[n][3]) == 7)
n++;
fclose(infile);
}
return n;
}
void analysis(double inStats[][4], double outStats[][3], int numGames)
{
int n;
for (n=0;n<numGames;n++)
{
outStats[n][0] = inStats[n][2] / inStats[n][0];
outStats[n][1] = inStats[n][0] / inStats[n][1] * 100;
outStats[n][2] = inStats[n][3] * 6;
}
}
double compAvgCmp(double stat[][4], int numGames)
{
int n;
double sum=0;
for (n=0;n<=numGames;n++)
{
sum += stat[n][0];
}
return sum / numGames;
}
double compAvgAtt(double stat[][4], int numGames)
{
int n;
double sum=0;
for (n=0;n<=numGames;n++)
{
sum += stat[n][1];
}
return sum / numGames;
}
double compAvgYds(double stat[][4], int numGames)
{
int n;
double sum=0;
for (n=0;n<=numGames;n++)
{
sum += stat[n][2];
}
return sum / numGames;
}
double compAvgTD(double stat[][4], int numGames)
{
int n;
double sum=0;
for (n=0;n<=numGames;n++)
{
sum += stat[n][3];
}
return sum / numGames;
}
double compAvgPts(double stat[][4], int numGames)
{
int n;
double sum=0;
for (n=0;n<=numGames;n++)
{
sum += stat[n][2];
}
return sum / numGames;
}