我有一个数组,我试图将这个数组打印为子块,其中每个块的大小为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;
}

推荐答案

根据您在 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

C++相关问答推荐

C++ cout打印顺序与C print相比

代码打印正确输出次数过多(CS50)

获取二维数组的最大元素

传递给空闲的无效地址0x71 db7 cb5e0:未分配值

rSP堆栈指针在返回函数调用的值时有任何用途吗?

如何在不修改字符串缓冲区早期使用的情况下覆盖字符串缓冲区

错误:在.h程序中重新定义 struct

如何避免重新分配指针数组时,我们从一开始就不知道确切的大小

C中出现分段错误后关闭文件

如何在C宏中确定Windows主目录?

从组播组地址了解收到的数据包长度

如何使用低级C++写出数值

如何创建一个C程序来存储5种动物的名字,并在用户 Select 其中任何一种动物时打印内存地址?

C指针概念分段故障

在吉陀罗中,_2_1_和CONCAT11是什么意思?

为什么会出现此错误?二进制表达式的操作数无效

从文件到链表读取日期

在 C 中传递参数时出现整数溢出

子进程不会修改父进程中的统计信息

如何在 C 中的 Postgres 函数的表中 for 循环