2012-09-03 9 views
5

Sto scrivendo un programma che visualizza tutte le informazioni in un array. Deve iniziare con l'indice dell'array tra parentesi (ad esempio [2]) e deve essere allineato a destra l'uno con l'altro.printf right allinea un numero con parentesi

se fosse solo il numero, so che si può fare:

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

ma mettendo tra parentesi in giro che avrebbe dato il seguente output

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

quando voglio davvero che sia:

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

Come faccio a fare questo?

risposta

8

Farlo in due fasi: innanzitutto creare una stringa non allineata in un buffer temporaneo, quindi stampare la stringa allineata a destra.

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

Una semplice cosa da fare sarebbe quella di rompere il basso ad un processo in due fasi:

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

è necessario solo una riga e non temporanea char-tampone:

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

Non è stato indicato come requisito, ma funziona solo se indice> 0. –

+0

Sì, ottimizzazione prematura e over-engineering fino in fondo, rendendo impossibile eseguire il debug del codice o mantenere 6 mesi da ora. ;-) –

Problemi correlati