在for循环中存储数组中的值

时间:2018-05-23 17:56:28

标签: c arrays for-loop malloc storage

编辑:对于这项任务,我需要输入我们在笛卡尔网格上放入多少个矩形“区域”。对于每个区域,我们的4个输入是2(x,y)坐标x1y1x2y2。坐标应该是矩形的左下角和右上角。我们正在检查每个区域是否与之前的任何区域重叠,因此我需要保存以前区域的坐标,以便稍后我可以使用它们来检查重叠。我的教授要求我们为这个程序使用动态内存分配。

我正在尝试创建一个x和y坐标数组,以便相互比较。 for循环的每次迭代都会要求2个坐标点(x1y1x2y2)与下一组进行比较点,所以每次for循环结束时,输入的坐标都需要保存。我已经为每个值使用了malloc(),我只需要帮助找出当下一个for循环以有效的方式启动时如何保护它们不被删除。我应该为每个值创建一个数组还是效率低下?

int i, j;
int zones, *x1, *y1, *x2, *y2;

scanf("%d", &zones);

x1 = malloc(sizeof(int)*zones);
y1 = malloc(sizeof(int)*zones);
x2 = malloc(sizeof(int)*zones);
y2 = malloc(sizeof(int)*zones);

for(i=0; i<zones; i++)
{
    scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
}

在我扫描我的价值观后,我不确定从那里开始。我也不确定我是否正确进入malloc。我希望每个值都足够大,以保持值等于要求的区域数。

2 个答案:

答案 0 :(得分:0)

您已创建一组缓冲区来存储大小区域的整数。你有4个变量指向每个缓冲区中的第一个字节(x1,y1,x2,y2)。

扫描语句中有一个小错误,扫描需要指向要存储值的内存的指针。但是x1等已经是指针了,所以你不需要&amp; x1,只需x1即可完成所需的操作。

接下来,您需要将指针前进到您为阵列创建的缓冲区中的下一个内存位置。你可以在每次扫描后递增指针;例如x1 ++。这会将每个值放在缓冲区的后续位置。

但是这也将失去对缓冲区本身的引用。您可以在循环之后将指针移回缓冲区的开头(例如 - x1 = x1 - zones),或者您可以创建一个不同的指针来迭代缓冲区,这可能更具可读性。

答案 1 :(得分:0)

您的阅读声明应为

scanf("%d%d%d%d", &x1[i], &y1[i], &x2[i], &y2[i]);

但你也应该处理输入不正确的情况;即,当用户输入错误并输入不是整数值的内容时。