Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? 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