2-dimensional arrays in C

So, this program should take statistics from the Auburn football season and calculate the average values ​​for each game and the entire season and print them on the screen in a graph. I thought I understood this, but I get errors all the time when I try to compile. I am sure that I also lack other things, but I must understand this as soon as I get the program to compile and produce results. I would probably know what happens if my teacher decides to teach the class. Any help would be greatly appreciated.

Here are some of the errors I get:

error: expected ')' before '[' token - this is displayed in all my compAvg functions.

error: the expected expression before the ']' token - this is displayed on the line numGames = getStats.

error: too few arguments for the analysis function

error: "numGames" uneclared here (not in function) - this appears in the void analysis function, and I assume this is due to the last error.

error: the indexed value is neither an array nor a pointer - this happens on my first second line printf

#include <stdio.h> 
#include <math.h>

#define MAXGAMES 15
#define AUSTATS "auPass2010.txt"


int main() //main function
{
double date[MAXGAMES][2], oppName[MAXGAMES], inStats[MAXGAMES][4], outStats[MAXGAMES][3];       //declare variables
double avgCmp, avgAtt, avgYds, avgTD, avgPts;                                                                
int numGames=0, n=0,r,c;


int getStats(int date[][2], char oppName[], double inStats[][4]);//prototypes
void analysis( double inStats[][4], double outStats[][3], double numGames);
double compAvgCmp(stat[][], numGames);
double compAvgAtt(stat[][], numGames);
double compAvgYds(stat[][], numGames);
double compAvgTD(stat[][], numGames);
double compAvgPts(stat[][], numGames);

numGames = getStats(date[][2], oppName[], inStats[][4]);

printf("\t\t2010 AUBURN PASSING STATISTICS\nDATE\tOPPONENT\t\tCMP\tATT\tYDS\tTD --\tAVEYDS\t%CMP\tPTS\n-----\t-------------\t----\t----\t----\t"); //prints header  

if(numGames <= 0) printf("%s NO GAMES READ\n", AUSTATS);

else
{
    analysis(double inStats[][4], double outStats[][3], double 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.0d\t%5.0d\t%5.0d\t%5.0d\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][4], numGames);
avgAtt = compAvgCmp(inStats[numGames][4], numGames);
avgYds = compAvgCmp(inStats[numGames][4], numGames);
avgTD = compAvgCmp(inStats[numGames][4], numGames);
avgPts = compAvgCmp(outStats[numGames][4], 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\t3.1f\n", avgCmp, avgAtt, avgYds, avgTD, avgPts);

return 0;
}


int getStats(int date[][2], char oppName[], double inStats[][4])
{
FILE *infile;
int n=0;

infile = fopen(AUSTATS, "r");

if(infile == NULL) printf("%s FILE OPEN ERROR\n");
while(fscanf(infile, "%d %d %s %lf %lf %lf %lf", 
                date[n][0], date[n][1], oppName[n], inStats[n][0], inStats[n][1], inStats[n][2], inStats[n][3]) !=EOF) n++;

return n;
}

void analysis(double inStats[numGames][4], double outStats[numGames][3], double 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(stat[][], numGames)
{
int n; 
double sum=0;

for (n=0;n<=numGames;n++)
{
    sum += stat[n][0]
}

return sum / numGames;
}

double compAvgAtt(stat[][], numGames)
{
int n; 
double sum=0;

for (n=0;n<=numGames;n++)
{
    sum += stat[n][1]
}

return sum / numGames;
}       

double compAvgYds(stat[][], numGames)
{
int n; 
double sum=0;

for (n=0;n<=numGames;n++)
{
    sum += stat[n][2]
}

return sum / numGames;
}

double compAvgTD(stat[][], numGames)
{
int n; 
double sum=0;

for (n=0;n<=numGames;n++)
{
    sum += stat[n][3]
}

return sum / numGames;
}

double compAvgPts(stat[][], numGames)
{
int n; 
double sum=0;

for (n=0;n<=numGames;n++)
{
    sum += stat[n][2]
}

return sum / numGames;
}
+3
source share
2 answers

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;
}
+5

: ? .

, , . , , , .

Ex:

int getStats(int date[][2], char oppName[], double inStats[][4]);

:

getStats(date, oppName, inStats)

EDIT: , .

. :

http://bytes.com/topic/c/insights/772412-arrays-revealed

http://cboard.cprogramming.com/c-programming/97898-passing-2-dimensional-array-function.html

0

Source: https://habr.com/ru/post/1775774/


All Articles