我试图做这样的事情
但是我无法想到要做到通用数字的事情。看,我得到了数字可以容纳的最大空间(在这种情况下,长度是4)。但是它里面的数字可以有任何小于或等于(空格 - 2)的长度,所以它可以适应而不会触及边界。我需要将每个方格中的数字居中,无论它有多少个字符。
我在第一行尝试了类似的东西:
printf(" ");
for (i = 0; i < columns; i++) {
printf(" ");
printf("%*d", length, i);
printf(" ");
}
但它不会在中心对齐数字,而是在右边。我该怎么办?
答案 0 :(得分: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;
}
输出:
| 123 |
| 1234 |
|1234567890|