Мои 5 центов:
Очень хорошее объяснение для этого дано в: http://deeplearning.net/software/theano/tutorial/ Python-памяти management.html
printf сам по себе не справится, но вы можете поиграть с "косвенной" шириной, которая задает ширину, считывая ее из аргумента. Попробуем так (хорошо, не идеально)
void f(char *s)
{
printf("---%*s%*s---\n",10+strlen(s)/2,s,10-strlen(s)/2,"");
}
int main(int argc, char **argv)
{
f("uno");
f("quattro");
return 0;
}
@ GiuseppeGuerrini's был полезен, предлагая, как использовать спецификаторы формата печати и разделяя пробел. К сожалению, он может усекать текст.
Следующее решает проблему усечения (при условии, что указанное поле на самом деле достаточно велико, чтобы вместить текст).
void centerText(char *text, int fieldWidth) {
int padlen = (fieldWidth - strlen(text)) / 2;
printf(%*s%s%*s\n", padLen, "", text, padlen, "");
}
Нет спецификатора формата printf ()
для центрирования текста.
Вам нужно будет написать свою собственную функцию или найти библиотеку, которая обеспечивает функциональность, которую вы ищете.
Да, вам придется либо написать свою собственную функцию который возвращает "test" и т. д., например
printf("%s %s %s", center("col1", 10), center("col2", 20), center("col3", 20));
Или у вас есть функция center_print, что-то вроде следующего:
void center_print(const char *s, int width)
{
int length = strlen(s);
int i;
for (i=0; i<=(width-length)/2; i++) {
fputs(" ", stdout);
}
fputs(s, stdout);
i += length;
for (; i<=width; i++) {
fputs(" ", stdout);
}
}