c -将数组作为子块打印



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

根据你在评论部分的澄清要求,你的代码有一些问题,对我来说最大的一个是它是不必要的复杂,但你正在寻找的是在这一行:

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

最后,你可以/应该为size设置一个常量:

#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

可以使用一个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整除,即每隔第五个元素之后打印一行破折号。

最新更新