2015-12-17 2 views
3

Как можно получить отступы с фиксированной длиной с конечными пробелами с помощью sprintf?отступы с фиксированной длиной с конечными пробелами

Например, как я могу получить sprintf(buf, "The number is:%i", n) для вывода 50 символов с завершающими пробелами?

+0

Вы читали ' мужчина 3 printf' (на Unix)? Поместите «printf» в поисковую систему по вашему выбору? – Robert

+0

Да, я искал и не повезло. Проблема в том, что я хочу фиксированную общую длину, а не частично фиксированную. Например, форматирование% 10i может только фиксировать число, оно ничего не помогает в общей длине. –

+0

Значит, вам не нужны 50 конечных пробелов, но вы хотите, чтобы весь вывод был 50 символов? – Robert

ответ

3

Мой man 3 printf говорит:

Опциональный Строка из десятичных цифр, задающая минимальную ширину поля. Если , преобразованное значение имеет меньшее количество символов, чем ширина поля, оно будет , заполненное пробелами слева (или справа, если флаг левой регулировки имеет значение ), чтобы заполнить ширину поля.

и

'-»Ширина поля флаг отрицательного; преобразованное значение должно быть слева, скорректированное на границе поля. За исключением n-конверсии, преобразованное значение заполняется справа с помощью пробелов , а не слева с пробелами или нулями. A - переопределяет 0, если оба даны.

и

Ширина поля или точность, или оба, могут быть обозначены звездочкой «*» или звездочкой за которым следует один или более десятичных цифр и «$» вместо разрядная строка. В этом случае аргумент int предоставляет ширину или точность поля.

Так что я пробовал:

#include <stdio.h> 
#include <string.h> 

int main() { 
    int num = 123; 
    char* text = "The number is: "; 
    printf("%s%-*iX\n", text, 50 - (int) strlen(text), num); 
} 

Это получает:

The number is: 123        X 

(. Там, где X это просто маркер, чтобы показать места для заполнения)

+0

Фантастический ответ – bobobobo

Смежные вопросы