将数组作为子块打印

3
我有一个数组,想将其作为子块打印出来,每个子块的大小为5。但是代码输出的结果并不符合我的期望,只打印了前5个值。如何将数组按照子块的方式打印出来?
int arr[298] = {some int values};
int in = 0;
int siz = 298;
int ii;
int rang = 5;
for (int i = 0; i < siz; i++) {
    if (in <= siz) {
        for (ii = in; ii < 5; ii++) {
            printf("arr=%d \n", arr[ii]);
        }
        printf("------------\n");
    }
    ind = ind + rang;
}
2个回答

0
根据您在评论区的澄清请求,您的代码存在一些问题,对我来说最大的问题是它过于复杂,但您要找的问题在这一行中:
ind = ind + rang;

ind在你的代码中未被声明,但我猜你的意思是 in。第一次内部循环运行时,in(ind)为0,所以一切顺利,之后in将变成5,你将其分配给ii,条件ii < 5将再也不成立,循环体将永远不会执行。

我想你可以通过将in用作数组的索引并且取消使用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时,打印一个分隔符,然后重置并开始新的块。

另一个可能的选项是使用索引本身来分隔块,当分子可被分母整除时,除法的余数为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


谢谢你的努力,但我的代码有什么问题? - kayla
@kayla 我在答案的顶部添加了一个解释。 - anastaciu

0

你可以使用单个 while 循环代替多个 for 循环。

int arr[298 ]={Some int Values};
int ind =0;
int siz= 298 ; 
printf("------------\n");   
while(ind<=siz-1){
    printf("arr=%d \n",arr[ind]);  
    ind++;
    if(ind%5==0){
    printf("------------\n");   
    }
}

在这里,您可以打印从0到297的元素,如果索引可被5整除,则打印一行破折号,即每五个元素后打印一次。

谢谢你的努力,但我的代码有什么问题? - kayla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接