2012-09-03 15 views
5

Piszę program, który wyświetla wszystkie informacje w tablicy. Musi zaczynać się od indeksu tablicy w nawiasach (na przykład [2]) i muszą one być wyrównane względem siebie.printf right wyrównanie numeru w nawiasie

czy był to tylko liczba, wiem, że można zrobić:

printf("%-10d", index); 

ale wprowadzenie nawiasów wokół, że dałoby następujący wynik

[   1] 
[   2] 
... 
[  10] 
[  11] 

kiedy naprawdę ma to być:

  [1] 
     [2] 
... 
     [10] 
     [11] 

Jak mam to zrobić?

Odpowiedz

8

Zrób to w dwóch krokach: najpierw utwórz niepowiązany ciąg w buforze tymczasowym, a następnie wypisz ciąg wyrównany do prawej.

char buf[sizeof(index) * (CHAR_BITS + 2)/3 + 4]; 
sprintf(buf, "[%d]", index); 
printf("%-12s", buf); 
2

Prostym rozwiązaniem byłoby rozbicie go w procesie dwuetapowym:

char tmp[128]; 
sprintf(tmp, "[%d]", index); 
printf("%-10s", tmp); 
2

wystarczy tylko jeden wiersz i nr tymczasowy char bufor:

printf("%*s[%d]\n",12-(int)log10(index),"",index); 
+0

Nie zostało to określone jako wymaganie, ale działa to tylko wtedy, gdy indeks> 0. –

+0

Tak, przedwczesna optymalizacja i nadmierna inżynieria do końca, uniemożliwiając debugowanie kodu lub utrzymaj 6 miesięcy od teraz. ;-) –