Left-pad printf ze spacjami

Jak mogę wstawić łańcuch ze spacjami po lewej stronie podczas korzystania z printf?

Na przykład chcę wydrukować "Hello" z 40 spacjami przed nim.

Również ciąg, który chcę wydrukować, składa się z wielu linii. Czy muszę drukować każdą linię osobno?

EDIT: żeby było jasne, chcę wydrukować dokładnie 40 spacji przed każdą linią.

Author: titaniumdecoy, 2008-11-16

4 answers

Jeśli chcesz, aby słowo "Hello" zostało wydrukowane w kolumnie o szerokości 40 znaków ze spacjami po lewej stronie, użyj poniższej opcji.

char *ptr = "Hello";
printf("%40s\n", ptr);

To daje 35 spacji, a następnie słowo "cześć". W ten sposób formatujesz rzeczy, gdy wiesz, jak szeroka ma być kolumna, ale DANE się zmieniają(cóż, jest to Jeden sposób, w jaki możesz to zrobić).

Jeśli wiesz, że chcesz dokładnie 40 spacji, to trochę tekstu, po prostu zapisz 40 spacji w stałej i wydrukuj je. Jeśli chcesz wydrukować wiele linie, albo używają wielu printf instrukcji, takich jak ta powyżej, albo robią to w pętli, zmieniając wartość ptr za każdym razem.

 92
Author: Bill the Lizard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-16 03:42:40

Używam tej funkcji do wcięcie mojego wyjścia (na przykład do drukowania struktury drzewa). indent jest liczbą spacji przed łańcuchem.

void print_with_indent(int indent, char * string)
{
    printf("%*s%s", indent, "", string);
}
 53
Author: jk_,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-01 15:20:50
int space=40;
printf("%*s",space,"Hello");

Ta instrukcja rezerwuje kolumnę 40 znaków, wypisuje łańcuch na końcu kolumny (nie po kolumnie, w ostatnich kolumnach.Łączna liczba użytych kolumn będzie nadal 40). To samo może być używane dla cyfr i liczb całkowitych w następujący sposób

printf("%*d",space,10);
printf("%*c",space,'');

Ta metoda użycia zmiennych spacji jest przydatna w wywołaniach funkcji, gdzie wymagana jest zmienna liczba spacji.Polecenia te będą nadal działać ze stałymi liczbami całkowitymi w następujący sposób

printf("%*d",10,10);
printf("%*c",20,'');
printf("%*s",30,"Hello");

Mam nadzieję, że to pomoże komuś takiemu jak ja w przyszłość.

 25
Author: Rece Foc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-28 15:07:43

Jeśli chcesz dokładnie 40 spacji przed łańcuchem, powinieneś po prostu zrobić:

printf("                                        %s\n", myStr );

Jeśli to jest zbyt brudne, możesz to zrobić (ale będzie to wolniejsze niż ręczne wpisanie 40 spacji): printf("%40s%s", "", myStr );

Jeśli chcesz, aby ciąg znaków był ustawiony w kolumnie 40 (tzn. miał do 39 spacji, tak aby prawy znak był w kolumnie 40), zrób to: printf("%40s", myStr);

Można również umieścić "do" 40 spacji po ciągu wykonując: printf("%-40s", myStr);

 15
Author: SoapBox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-24 21:16:40