gpt4 book ai didi

c - C 中的二维数组

转载 作者:行者123 更新时间:2023-12-01 13:57:54 25 4
gpt4 key购买 nike

所以,这个程序应该从奥本的足球赛季中获取统计数据,计算每场比赛和整个赛季的平均值,并将它们打印在屏幕上的图表中。我以为我已经弄清楚了,但是我在尝试编译时不断出错。我确定我也遗漏了其他一些东西,但是一旦我让程序编译并给我结果,我就应该弄清楚这一点。如果我的老师决定教这门课,我可能会知道发生了什么。任何帮助将不胜感激。

以下是我遇到的一些错误:

error: expected ')' before '[' token - this shows up on all of my compAvg functions.

error: expected expression before ']' token - this one shows up at the numGames=getStats line.

error: too few arguments to function 'analysis'

error: 'numGames' undeclared here (not in a function) - this appears at the void analysis function and I'm guessing it has to do with the last error.

error: subscripted value is neither array nor pointer - this is coming up on my first second printf line

#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;
}

最佳答案

当您传递数组时,您只需在调用站点引用名称:

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

numGames = getStats(date, oppName, inStats);

在被调用的函数中,您(或多或少)使用了您显示的符号。

但是,当您的函数接受多维数组时,您必须在函数的参数列表中指定第二个和后续维度的大小。

double compAvgTD(stat[][], numGames)

double compAvgTD(double stat[][4], int numGames)

这既适用于 main() 内的声明,也适用于函数的定义。请注意,我也添加了类型。


正如另一位回答者所指出的,在 main() 中声明函数是一种惯例(虽然实际上并没有错)。如果声明的函数会被任何其他函数调用,那么在 main() 中声明函数是不好的——你必须自己重复声明其他函数中的函数他们被称为,与敏捷格言相矛盾:DRY Don't Repeat Yourself。


“我是个容易上当受骗的人”编译解决方案

要编译代码,需要进行许多更改。代码尚未运行。

此处至少存在一个错误 - 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();否则,编译器警告范围内没有原型(prototype)。

#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;
}

关于c - C 中的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4221687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com