L oop над массивом и затем l oop в обратном направлении. [С] - PullRequest
0 голосов
/ 04 мая 2020

Я хочу сделать программу зацикливаясь на массиве и затем зацикливаясь назад. Как я могу сделать это лучше с меньшим количеством кода в C? Массив состоит из 8 элементов!

while (1) {
    if (i == 0) {
        direction = 0; // RIGHT DIRECTION
    }
    if (i == 7) {
        direction = 1; // LEFT DIRECTION
    }
    PORTD = array[i]; // NEEDED ARRAY ELEMENT

    if (direction == 0) {
        i++;
    } else {
        i--;
    }
}

Ответы [ 2 ]

2 голосов
/ 04 мая 2020

Вы можете упростить свой код, сделав direction приращение для следующего индекса, 1 или -1.

Вот модифицированная версия:

int i = 0, direction = 1;
for (i = 0;; i += direction) {
    if (i == 0) {
        direction = 1; // RIGHT DIRECTION
    } else
    if (i == 7) {
        direction = -1; // LEFT DIRECTION
    }
    PORTD = array[i]; // NEEDED ARRAY ELEMENT
}
0 голосов
/ 04 мая 2020

Как уже отмечали другие, вам нужно поменять знак переменной приращения, а затем вам нужно использовать правильное условие для завершения l oop:

#include <stdio.h>

int main()
  {
  int i = 0, direction = 1;
  int PORTD, array[8] = {10, 11, 12, 13, 14, 15, 16, 17};

  for (i = 0 ; i >= 0 ; i += direction)
    {
    PORTD = array[i];

    printf("i=%d array[%d]=%d\n", i, i, array[i]);

    if(i == (sizeof(array)/sizeof(array[0]))-1 )
      direction = -1;
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...