C Printf未显示并返回值322225477

C Printf未显示并返回值322225477,c,arrays,pointers,struct,C,Arrays,Pointers,Struct,一般来说,我对C语言和编程还不熟悉,所以当我将结构与数组和指针结合在一起时,我对结构的使用有点困难。我试图尝试创建一个结构,然后创建一个数组指针(指向该结构)重复10次。然后找到每个结构的平均值并打印出来 在循环结束之前,返回值为0,一切似乎都正常工作 #include <stdio.h> #include <stdlib.h> typedef struct Tries { float attempts1; float attempts2; float attempts

一般来说,我对C语言和编程还不熟悉,所以当我将结构与数组和指针结合在一起时,我对结构的使用有点困难。我试图尝试创建一个结构,然后创建一个数组指针(指向该结构)重复10次。然后找到每个结构的平均值并打印出来

在循环结束之前,返回值为0,一切似乎都正常工作

#include <stdio.h>
#include <stdlib.h>

typedef struct Tries {
float attempts1;
float attempts2;
float attempts3;
float aver;
}Try;

int main(int argc, char *argv[]) {
int i,size=10,at1,at2,at3;
Try** arrayofTries= malloc (sizeof(Try)*size);
for (i=0;i<size;i++){

        arrayofTries[i]->attempts1= rand () %(900 - 700)+700;
        arrayofTries[i]->attempts2= rand () %(900 - 700)+700;
        arrayofTries[i]->attempts3= rand () %(900 - 700)+700;
        at1= arrayofTries[i]->attempts1;
        at2= arrayofTries[i]->attempts2;
        at3=arrayofTries[i]->attempts3;
        arrayofTries[i]->aver = (at1+at2+at3)/3;
     printf ("The average of %d person is%f",i,arrayofTries[i]->aver);
}

return 0;
}
#包括
#包括
typedef结构{
浮动尝试1;
浮动尝试2;
浮动尝试3;
浮动均衡器;
}尝试;
int main(int argc,char*argv[]){
int i,大小=10,at1,at2,at3;
Try**arrayofTries=malloc(sizeof(Try)*大小);
对于(i=0;iattents1=rand()%(900-700)+700;
arrayofTries[i]->attempts2=rand()%(900-700)+700;
arrayofTries[i]->attempts3=rand()%(900-700)+700;
at1=arrayofTries[i]->尝试1;
at2=arrayofTries[i]>attempts2;
at3=arrayofTries[i]>attempts3;
arrayofTries[i]>aver=(at1+at2+at3)/3;
printf(“平均%d人是%f”,i,arrayofTries[i]>aver);
}
返回0;
}

arrayofTries
的类型应为
Try*
而不是
Try**

Try *arrayofTries = malloc (sizeof(Try) * size);

所以你所有的
->
都应该是简单的点

数组
应该是
Try*
而不是
Try**

Try *arrayofTries = malloc (sizeof(Try) * size);

因此,所有
->
都应该是简单的点

您正在分配指向
的指针,请尝试
,但不分配指向元素本身的直接指针。看起来您的目的是声明1D数组,而不是2D数组,因此您应该做的是将
数组的类型从
更改为
数组>试试**
试试*

另外,当您完成使用分配给
malloc
的内存时,
free
它:

free(arrayofTries);
arrayofTries = NULL;

您正在将指针分配给指向
Try
的指针,但没有将直接指针分配给元素本身。看起来您的目的是声明1D数组,而不是2D数组,因此您应该做的是将
arrayofTries
的类型从
Try**
更改为
Try*

另外,当您完成使用分配给
malloc
的内存时,
free
它:

free(arrayofTries);
arrayofTries = NULL;

我可以在下面看到公认的答案,所以我会在评论中提到这一点(只是一个旁注,没有解决您的问题),您可以直接使用结构成员变量计算平均值,而不需要at1、at2和at3。就像这样
arrayofTries[I]>aver=(arrayofTries[I]。attempts1+arrayofTries[I].attempts2+arrayofTries[i].attempts2)/3;
我可以在下面看到公认的答案,所以我会在注释中提到这一点(只是一个旁注,没有解决您的问题),您可以直接使用结构成员变量计算平均值,而不需要at1、at2和at3。就像这样
arrayofTries[i]>aver=(arrayofTries[i].attempts1+arrayofTries[i].attempts2+arrayofTries[i].attempts2)/3;