【发布时间】:2017-12-22 23:48:52
【问题描述】:
typedef struct Spheres{
int PositionX;
int PositionY;
int Color;
int Mass;
int Radius;
int SpeedX;
int SpeedY;
}Sphere;
char readFile(FILE *file,Sphere **totalSphere){
int positionX,positionY,color,mass,radius,speedX,speedY,amountOfSpheres,i;
fscanf(file,"%d",&amountOfSpheres);
*totalSphere=malloc(amountOfSpheres*sizeof(Sphere));
for (i=0;i<amountOfSpheres;i++){
fscanf(file,"%d%d%d%d%d%d%d",&positionX,&positionY,&color,&mass,&radius,&speedX,&speedY);
totalSphere[i]->PositionX=positionX;
totalSphere[i]->PositionY=positionY;
totalSphere[i]->Color=color;
totalSphere[i]->Mass=mass;
totalSphere[i]->Radius=radius;
totalSphere[i]->SpeedX=speedX;
totalSphere[i]->SpeedY=speedY;
}
printf("%d %d %d %d %d %d %d\n",totalSphere[0]->PositionX,totalSphere[0]->PositionY,totalSphere[0]->Color,totalSphere[0]->Mass,totalSphere[0]->Radius,totalSphere[0]->SpeedX,totalSphere[0]->SpeedY);
printf("%d %d %d %d %d %d %d\n",totalSphere[1]->PositionX,totalSphere[1]->PositionY,totalSphere[1]->Color,totalSphere[1]->Mass,totalSphere[1]->Radius,totalSphere[1]->SpeedX,totalSphere[1]->SpeedY);
}
int main()
{
FILE *file;
Sphere *totalSphere;
totalSphere=NULL;
if ((file=fopen("input.txt","r"))!=NULL){
if (readFile(file,&totalSphere)){
printf("%d %d %d %d %d %d %d\n",totalSphere[0].PositionX,totalSphere[0].PositionY,totalSphere[0].Color,totalSphere[0].Mass,totalSphere[0].Radius,totalSphere[0].SpeedX,totalSphere[0].SpeedY);
printf("%d %d %d %d %d %d %d\n",totalSphere[1].PositionX,totalSphere[1].PositionY,totalSphere[1].Color,totalSphere[1].Mass,totalSphere[1].Radius,totalSphere[1].SpeedX,totalSphere[1].SpeedY);
fclose(file);
return 0;
}
这是我的代码 this 是我正在读取的文本文件
问题在于,当函数 readFile() 结束时,totalSphere[1] 中的值会丢失,如您所见here,但 totalSphere[0] 中的值正常。为什么会这样?
【问题讨论】:
-
在
readFile内应该是(*totalSphere)[i].PositionX = positionX而不是totalSphere[i]->PositionX=positionX。等等。在readFile的任何地方,您都应该使用(*totalSphere)[i].,而不是totalSphere[i]->。后者是完全错误的。 -
这甚至不应该编译。 main 的“totalSphere”是一个指向结构的指针,您在 readFile 中访问它,就好像它是指向指针的指针一样。您的 '->' 必须是 '.'。打开所有编译器警告并聆听它们!并合理地命名您的变量...您必须使用变量“totalSphere”,这些变量不仅不相同,而且类型也不相同。
-
@Lee Daniel Crocker:
mainstotalSphere作为&totalSphere传递给readFile,并在readFile作为Sphere **totalSphere接收。这里没有错 - 它应该编译得很好。但是readFile中的代码毫无意义。看来作者只是不惜一切代价试图“让它编译”,而不关心代码的含义。 -
为了便于阅读和理解: 1) 尊重打印页面的右边距。建议在逗号后插入新行并缩进以下行
-
贴出的代码编译失败!它缺少所需头文件所需的包含语句。此外,函数
main()缺少两个右大括号'}'。注意:在 C 中,缩进没有任何意义(除了可读性)
标签: c pointers struct reference