从中间到开头迭代一个数组

时间:2016-06-21 14:24:06

标签: c arrays loops

我想迭代任何一个从接近中间的索引开始的数组,然后转到结尾然后转到开头。
例如:

#include <stdio.h>

int main(){


int a[]= {1, 2, 3, 4, 5, 6, 7,};

int i = 0;

for (i = 2; i < 6; i++){

    if (i == 6){
        i = 0;

    }

    printf("%d\n", a[i]);
}

return 0;
}

如何在索引到达结尾时将索引“重新分配”为零(索引6)

2 个答案:

答案 0 :(得分:2)

这是一个简单的写作。没有测试,所以根据需要调整。这个想法让计数器从0开始,每次使用模数加上start值,使其相对。

int a[]= {1, 2, 3, 4, 5, 6, 7};

int length = sizeof(a)/sizeof(a[0]);
int start = length/2;

for (int i = 0; i < length; i++)
{
  printf("%d\n", a[(i+start)%length]);
}

并且在我得到这个答案之前向@SouravGhosh道具指出了评论中的模数。

答案 1 :(得分:1)

如果我完全理解你想要两个for循环的问题,一个从数组的中间开始,然后转到数组的 end ,第二个从中间(减1)并减少到数组的开始。 这是您可以使用的代码,它非常简单,对我来说很好用:

#include <stdio.h>

int main() {

    int a[] = { 1, 2, 3, 4, 5, 6, 7, };

    int max = (int)(sizeof(a)/sizeof(a[0]));
    int middle = (int)(max / 2);
    int i;

    for (i = middle; i < max ; i++) {
        printf("%d\n", a[i]);
    }

    for (i = middle - 1; i >= 0; i--) {
        printf("%d\n", a[i]);
    }
}