2012-09-03 35 views
5

Bir dizide tüm bilgileri görüntüleyen bir program yazıyorum. Dizi dizini ile parantez içinde başlamalıdır (örneğin, [2]) ve birbirleriyle doğru hizalanmış olmaları gerekir. sadece sayı olsaydıprintf right bir köşeli parantez hizalamak

, ben bunu yapabilirsiniz biliyorum:

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

ama gerçekten olmasını istediğinizde o köşeli parantez koyarak aşağıdaki çıktı üretmesi

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

verecekti:

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

Bunu yapmayı nasıl yaparım?

cevap

8

İki adımda yapın: önce geçici bir arabelleğe hizalanmamış bir dize oluşturun, ardından dizeyi sağa hizalayın.

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

iki aşamalı bir süreç bunu yıkmak olacaktır yapmanın bir kolay bir şey:

char tmp[128]; 
sprintf(tmp, "[%d]", index); 
printf("%-10s", tmp); 
2
yalnızca bir hatta ihtiyacı

ve hiçbir geçici karakter-tamponu:

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

Bir gereksinim olarak belirtilmemiş, ancak bu yalnızca dizin> 0 –

+0

Evet, zamanından önce en iyi duruma getirme ve aşırı mühendislik üzerinde çalışıyor ve kodunuzun hata ayıklamasını imkansız hale getiriyor veya bundan 6 ay sonra ;-) –

İlgili konular