Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
我有以下结构
在我的函数中,我这样称呼它
目前,我为结构赋予了所有良好的价值,数据也很好。但是,当我尝试打印以前为例如gamesStruct.result [0]分配的值时,我得到了什么
是一个大数字,看起来像一个内存地址,例如gamesStruct.result [0]为空。
有任何想法吗 ?
这是更多代码
}
如果gamenum大于或等于0,则我的函数会为该结构正确分配值。
但是当我尝试打印它们时,由于数据错误,我的程序崩溃了
我想指出的是,在尝试访问值之前,我已经为其分配了值,这就是我的问题
(请注意在调用迭代之前创建
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
我有以下结构
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
,并在动态分配时正确销毁它。09-08 01:20