【发布时间】:2018-05-08 22:04:27
【问题描述】:
我有这个代码
#include "stdio.h"
#include "stdlib.h"
#include <string.h>
typedef struct {
char brand[40];
int year;
int km;
float price;
}Autos;
int userInput;
void menu();
void scanCars(Autos *pointer);
void print_struct(Autos *pointer);
int main(int argc, char const *argv[])
{
Autos *pointerCar, Cars;
pointerCar=&Cars;
pointerCar=(Autos *)malloc(5*sizeof(Autos));
int value= 1;
while (value)
{
menu();
switch (userInput)
{
case 1:
scanCars(pointerCar);
break;
case 2:
print_struct(pointerCar);
break;
case 3:
value=0;
break;
}
}
free(pointerCar);
return 0;
}
void menu()
{
printf("1) Input Cars:\n" );
printf("2) Print Cars:\n" );
printf("3) Exit\n" );
scanf("%d", &userInput );
printf("=================\n" );
}
void scanCars(Autos *pointer)
{
printf("1) Scanning CARS:\n");
for (int i = 0; i < 2; i++)
{
printf("Brand:");
scanf("%s", (pointer+i)->brand);
printf("Year: ");
scanf("%d", &(pointer+i)->year );
printf("Kilometros:");
scanf("%d",&(pointer+i)->km );
printf("price: ");
scanf("%f",&(pointer+i)->price );
}
printf("=================\n" );
}
void print_struct(Autos *pointer)
{
for (int i = 0; i < 3; i++)
{
printf("Car #[%d]\n",i+1 );
printf("Brand: %s\n",(pointer+i)->brand);
printf("Year: %d\n",(pointer+i)->year );
printf("Kilometraje: %d\n",(pointer+i)->km );
printf("Price: $%.2f\n",(pointer+i)->price );
printf("=================\n" );
}
}
代码运行良好,可以存储一些汽车数据,然后在需要时打印出来。
问题:
当我第二次尝试存储新车数据时,我丢失了最后一次输入。所以我的问题是如何存储一个新的结构数组并打印整个数据:
示例:
- 每个
*pointerCar有 5 辆汽车 - 那么如何保存
*pointerCar to array[3] of pointerCars - 我总共将拥有 15 辆汽车,但每辆汽车将拥有 5 辆汽车
【问题讨论】:
-
首先将
pointerCar指向Cars,然后立即将其分配给malloc的结果。 -
如果您想存放多辆汽车,您必须将它们存放在不同的地方。
-
@ChristianGibbons,是的,所以我可以为每个指针拥有 5 辆车
-
这解释了为什么您将
malloc的结果分配给pointerCar,但Cars从未发挥作用。您创建它,将某些东西指向它,然后将它指向远离它的东西,再也不要触摸它。
标签: c pointers data-structures structure