Хранение значений в массиве в цикле for - PullRequest
0 голосов
/ 23 мая 2018

Редактировать: Для этого задания мне нужно указать, сколько прямоугольных «зон» мы помещаем в декартову сетку.Наши 4 входа - это 2 (x, y) координаты x1, y1, x2, y2 для каждой зоны.Координаты должны быть нижним левым углом и верхним правым углом прямоугольника.мы проверяем, перекрывает ли каждая зона какую-либо из предыдущих зон, поэтому мне нужно сохранить координаты предыдущих зон, чтобы я мог использовать их позже для проверки перекрытий.Мой профессор требует, чтобы мы использовали динамическое выделение памяти для этой программы.

Я пытаюсь создать массив координат x и y для сравнения друг с другом.Каждая итерация цикла for будет запрашивать 2 координатные точки (x1, y1, x2, y2) для сравнения со следующим набором точек, поэтому каждый раз цикл 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 голосов
/ 23 мая 2018

Ваше заявление о прочтении должно быть

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

Но вы должны также обработать случай, когда ввод неправильный;то есть, когда пользователь вводит опечатки и вводит что-то, что не является целочисленным значением.

0 голосов
/ 23 мая 2018

Вы создали набор буферов для хранения целых размерных зон.У вас есть 4 переменные, которые указывают на первый байт в каждом буфере (x1, y1, x2, y2).

У вас небольшая ошибка в операторе сканирования, сканирование ожидает указатели на память, где вы хотите сохранить свое значение.Но x1 и т. Д. Уже являются указателями, поэтому вам не нужен & x1, просто x1 будет делать то, что вам нужно.

Далее вы хотите продвинуть указатели для сканирования в следующую ячейку памяти в буфере, который вы создали для вашегомассив.Вы можете просто увеличивать указатели после каждого сканирования;например, x1 ++.Это поместит каждое значение в последующее место в вашем буфере.

Но это также потеряет ссылку на сами буферы.Вы можете переместить указатели назад к началу буферов после цикла (например, - x1 = x1 - zone) или просто создать другой указатель для перебора буфера, который может быть более читабельным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...