我正在尝试做这样的事情

但我想不出有什么可以做到通用数字.看,我得到了数字可以容纳的最大空间(在这种情况下,长度是4).但是它里面的数字可以有任何小于或等于(空格 - 2)的长度,所以它可以适应而不会触及边界.我需要将每个方块中的数字居中,无论它有多少个字符.
我尝试了第一行这样的事情:
printf(" ");
for (i = 0; i < columns; i++) {
printf(" ");
printf("%*d", length, i);
printf(" ");
}
Run Code Online (Sandbox Code Playgroud)
但它不会在中心对齐数字,而是在右边.我该怎么办?
小智 5
应该做的事情(检查错误):
#include <stdio.h>
#include <assert.h>
#define BUFSIZE 20
void print_centered(size_t width, int num) {
char buffer[BUFSIZE];
int len;
int padding_left, padding_right;
assert(width < BUFSIZE);
len = snprintf(buffer, BUFSIZE, "%d", num);
padding_left = (width - len) / 2;
padding_right = width - len - padding_left;
(void)snprintf(buffer, BUFSIZE, "%*d%*s", len + padding_left, num, padding_right, padding_right ? " " : "");
printf("%s", buffer);
}
int main(int argc, char **argv) {
printf("|");
print_centered(10, 123);
printf("|\n");
printf("|");
print_centered(10, 1234);
printf("|\n");
printf("|");
print_centered(10, 1234567890);
printf("|\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
| 123 |
| 1234 |
|1234567890|
Run Code Online (Sandbox Code Playgroud)