Ustaw zmienną szerokość kolumny tekstu w printf

W celu określenia wielkości kolumny w języku C używamy %<number>d. Na przykład, mogę wpisać %3d i to da mi kolumnę width=3. Mój problem polega na tym, że mój numer po {[2] } jest zmienną, którą otrzymuję, więc potrzebuję czegoś takiego jak %xd (Gdzie x jest zmienną całkowitą, którą otrzymałem kiedyś w moim programie). Ale to nie działa.

Czy jest na to jakiś inny sposób?
Author: Alaa M., 2011-08-18

2 answers

Możesz to zrobić w następujący sposób:

printf("%*d", width, value);

Z komentarza Lee:
Możesz również użyć * dla rozmiaru precyzji:

printf("%*.*f", width, precision, value);
 70
Author: Oliver Charlesworth,
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
2015-10-03 14:11:42

Tylko dla kompletności, chciałem wspomnieć, że z wersjami zgodnymi z POSIXprintf() Możesz również umieścić rzeczywistą wartość szerokości pola (lub precyzji) w innym miejscu na liście parametrów i odnieść się do niej za pomocą numeru parametru opartego na 1, po którym następuje znak dolara:

Szerokość lub precyzja pola, lub oba te pola, mogą być oznaczone gwiazdką " ∗ "lub gwiazdką, po której następuje jedna lub więcej cyfr dziesiętnych i" $ " zamiast ciągu cyfr. W tym przypadku argument int dostarcza szerokość pola lub precyzję. Ujemna szerokość pola jest traktowana jako lewy znacznik regulacji, po którym następuje dodatnia szerokość pola; ujemna precyzja jest traktowana tak, jakby jej brakowało. Jeśli dyrektywa o pojedynczym formacie miesza argumenty pozycyjne (NN$) i nie-pozycyjne, wyniki są niezdefiniowane.

E. g., printf ( "%1$*d", width, value );

 6
Author: jetset,
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
2013-08-28 00:23:22