C Printf未显示并返回值322225477
一般来说,我对C语言和编程还不熟悉,所以当我将结构与数组和指针结合在一起时,我对结构的使用有点困难。我试图尝试创建一个结构,然后创建一个数组指针(指向该结构)重复10次。然后找到每个结构的平均值并打印出来 在循环结束之前,返回值为0,一切似乎都正常工作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
#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;