根据您在 comments 部分提出的澄清要求,您的代码存在一些问题,对我来说,最大的问题是它不必要地复杂,但您正在寻找的问题如下:
ind = ind + rang;
ind
没有在你的代码中声明,但我假设你的意思是in
,第一次内部循环运行in
(ind
)是0,所以一切顺利,在那之后,in
将是5,你把它分配给ii
,条件ii < 5
将永远不会再次为真,循环体将永远不会被执行.
我想你可以通过使用in
作为数组的索引来修复它,并go 掉rang
,因为它是不需要的,如下所示:
int arr[298] = {some int values};
int in = 0;
int siz = 298;
for (int i = 0; i < siz; i++) {
//if (in < siz) { moving this into the for loop
for (int ii = 0; ii < 5 && in < siz; ii++, in++) {
printf("arr=%d \n", arr[in]);
}
printf("------------\n");
//}
}
现场演示:https://godbolt.org/z/YzG9sno1n
但您不需要嵌套循环,有几种方法可以做到这一点,一种简单的方法是使用一个控制块大小的变量:
int arr[298] = {some int values};
int siz = 298;
int count = 5;
for (int i = 0; i < siz; i++) {
printf("arr=%d \n", arr[i]);
count--;
if (count == 0) {
printf("------------\n");
count = 5;
}
}
现场演示:https://godbolt.org/z/b4e8vWfhM
在上述代码count
中,作为控制变量,索引中的值打印5次,当它达到0时,打印一个分隔符,它重置并启动新块.
另一种可能的 Select 是使用索引本身来分隔块,你知道除法的余数是0,当分子可被分母整除时,你可以利用这一点:
int arr[298] = {some int values};
int siz = 298;
for (int i = 0; i < siz; i++) {
if (i % 5 == 0) { // && i != 0 if you want to skip the initial separator
printf("------------\n");
}
printf("arr=%d \n", arr[i]);
}
现场演示:https://godbolt.org/z/nne3z38rY
最后,您可以/应该使用恒定的大小值:
#include <stdio.h>
#define SIZE 298
int main() {
int arr[SIZE] = {some int values};
for (int i = 0; i < SIZE; i++) {
if (i % 5 == 0 && i != 0) { // skipping the initial separator
printf("------------\n");
}
printf("arr=%d \n", arr[i]);
}
}
现场演示:https://godbolt.org/z/Mc4Yh4cav