我想迭代任何一个从接近中间的索引开始的数组,然后转到结尾然后转到开头。
例如:
#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)
答案 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]);
}
}