gpt4 book ai didi

c++ - C 中的结构出现问题,处于不正确结果的边缘

转载 作者:行者123 更新时间:2023-11-30 21:44:10 24 4
gpt4 key购买 nike

我有以下结构

struct statistics {
int result[100],steps[100],gamecounter;
float time[100];
};
typedef struct statistics GAMEST;

在我的函数中我这样调用它

GAMEST gamesStruct;
gamesStruct.result[2]=res;
gamesStruct.steps[2]=step;
gamesStruct.time[2]=tim;

目前,我为结构赋值,一切都很好,数据也很好。但是当我尝试打印之前分配的值(例如 gamesStruct.result[0] )时,我得到了什么是一个很大的数字,看起来像一个内存地址,就像 gamesStruct.result[0] 为空时一样。

有什么想法吗?

这里还有一些代码

 int stats(int res,int gamenum,int step,float tim,int counter){
GAMEST gamesStruct;
char vic[3][7];
if(gamenum>=0){
strcpy(vic[0],"Draw");
strcpy(vic[1],"Victory");
strcpy(vic[2],"Loss");
gamesStruct.result[gamenum]=res;
gamesStruct.steps[gamenum]=step;
gamesStruct.time[gamenum]=tim;
}else{
printf("Stats per game :\n\n");
system("pause");
for(int i=0;i<=counter;i++){
int tmp=gamesStruct.result[0];
printf("%d",gamesStruct.result[0]);
system("pause");
system("pause");
printf("Game %d : %s in %d moves and %f seconds\n\n",i+1,vic[tmp],gamesStruct.steps[i],gamesStruct.time[i]);
}
printf("out");
system("pause");
int ressum[3]={0,0,0};
int stepsum=0;
int timesum=0;
printf("2");
system("pause");
for(int i=0;i<=counter;i++){
ressum[gamesStruct.result[i]]=ressum[gamesStruct.result[i]]+gamesStruct.result[i];
stepsum=stepsum+gamesStruct.steps[i];
timesum=timesum+gamesStruct.time[i];
}
float resmid[3],stepmid,timemid;
resmid[0]=resmid[0]/(counter+1);
resmid[1]=resmid[1]/(counter+1);
resmid[2]=resmid[2]/(counter+1);
stepmid=stepmid/(counter+1);
timemid=timemid/(counter+1);
printf("\n\nAverage stats for %d games:\n\n",counter+1);
printf("\nVictories :%f Losses :%f Draws :%f \n",resmid[1],resmid[2],resmid[0]);
printf("\nAverage moves :%f and Time :%f\n\n",stepmid,timemid);
}


return(0);

}

如果 gamenum 大于或等于 0,我的函数会向结构正确分配值。但是当我尝试打印它们时,我的程序崩溃了,因为数据错误

我想指出,在尝试访问它们之前我已经分配了值,这就是我的问题

最佳答案

根据您的代码 - 假设函数 stats 在每次游戏迭代中执行一次。 gamesStruct 局部变量在 stats 结束时被销毁,并被一次又一次地声明(和初始化)。

这就是为什么之前的结果被清除的原因。

您应该在 tge 调用 API 时声明 gamesStruct 并通过引用 stats 方法将其传递。

int stats(GAMEST& gamesStruct, int res,int gamenum,int step,float tim,int counter)
{
... // same as before
}

(注意在调用迭代之前创建 gamesStruct 并在动态分配时正确销毁它。

关于c++ - C 中的结构出现问题,处于不正确结果的边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23854713/

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