如何将数组按大小为5的子块打印?原代码仅输出前5个元素
数组按固定大小子块打印的代码修正
原代码存在几个关键问题,导致仅输出前5个元素:
- 内层循环终止条件错误,固定写
ii < 5只会遍历数组前5个元素,未结合当前子块的起始位置 - 外层循环遍历逻辑错误,无需遍历数组所有元素,应按子块数量循环
- 存在变量名拼写错误(
ind应为in) - 未处理最后一个不足5个元素的子块的边界问题
修改后的代码如下:
int arr[298] = {some int values}; int in = 0; int siz = 298; int ii; int rang = 5; // 按子块数量循环,(siz + rang -1)/rang 可计算总块数,这里直接用in迭代更直观 for (; in < siz; in += rang) { // 内层循环遍历当前子块,取当前块结束位置和数组长度的最小值,避免越界 for (ii = in; ii < in + rang && ii < siz; ii++) { printf("arr=%d\n", arr[ii]); } printf("------------\n"); }
关键修改点说明:
- 外层循环直接用
in作为迭代变量,每次递增rang(5),直到in超出数组长度,刚好覆盖所有子块 - 内层循环终止条件改为
ii < in + rang && ii < siz,既保证每个子块最多5个元素,又能正确处理最后一个不足5个元素的子块 - 修正了变量名拼写错误,将
ind改为in - 移除了冗余的外层循环计数器
i,简化代码逻辑
内容的提问来源于stack exchange,提问作者lena
相关产品推荐
相关产品推荐

