您可以使用余数运算符% 来确定何时在新行上打印。这是一个带有display_grid() 函数的示例程序,该函数将int 的数组、数组的大小和每行的所需大小作为参数。如果可以将数组平均划分为所需列数的行,则返回零。否则返回非零值。这允许您以各种网格格式显示一维数组;如果数组不能均分,则不打印任何内容。
目前,这会打印包含最多 2 位数字(或 1 位数字和一个符号)的数字的网格。修改它以打印更多数字会很简单,或者需要进行更多修改以使显示宽度适合输入所需的最大宽度。
#include <stdio.h>
#define ARR_SZ 16
int display_grid(int *arr, size_t arr_sz, size_t row_sz);
int main(void)
{
int array[ARR_SZ];
for (size_t i = 0; i < ARR_SZ; i++) {
array[i] = i;
}
size_t row_sz = 4;
if (display_grid(array, ARR_SZ, row_sz) != 0) {
fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz);
}
row_sz = 8;
if (display_grid(array, ARR_SZ, row_sz) != 0) {
fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz);
}
row_sz = 2;
if (display_grid(array, ARR_SZ, row_sz) != 0) {
fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz);
}
row_sz = 1;
if (display_grid(array, ARR_SZ, row_sz) != 0) {
fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz);
}
row_sz = 16;
if (display_grid(array, ARR_SZ, row_sz) != 0) {
fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz);
}
row_sz = 6;
if (display_grid(array, ARR_SZ, row_sz) != 0) {
fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz);
}
row_sz = 32;
if (display_grid(array, ARR_SZ, row_sz) != 0) {
fprintf(stderr, "Array size not evenly divisible by %zu\n", row_sz);
}
return 0;
}
int display_grid(int *arr, size_t arr_sz, size_t row_sz)
{
int ret_val = arr_sz % row_sz;
if (ret_val == 0) {
/* Print top border */
putchar(' ');
for (size_t i = 1; i < 3 * row_sz; i++) {
putchar('_');
}
putchar('\n');
/* Print rows of grid */
for (size_t i = 0; i < arr_sz; i++) {
printf("|%-2d", arr[i]);
if ((i + 1) % row_sz == 0) {
printf("|\n");
}
}
/* Print bottom border */
for (size_t i = 0; i < 3 * row_sz + 1; i++) {
putchar('-');
}
putchar('\n');
}
return ret_val;
}
程序输出:
___________
|0 |1 |2 |3 |
|4 |5 |6 |7 |
|8 |9 |10|11|
|12|13|14|15|
-------------
_______________________
|0 |1 |2 |3 |4 |5 |6 |7 |
|8 |9 |10|11|12|13|14|15|
-------------------------
_____
|0 |1 |
|2 |3 |
|4 |5 |
|6 |7 |
|8 |9 |
|10|11|
|12|13|
|14|15|
-------
__
|0 |
|1 |
|2 |
|3 |
|4 |
|5 |
|6 |
|7 |
|8 |
|9 |
|10|
|11|
|12|
|13|
|14|
|15|
----
_______________________________________________
|0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10|11|12|13|14|15|
-------------------------------------------------
Array size not evenly divisible by 6
Array size not evenly divisible by 32