2012-09-03 16 views
5

मैं एक प्रोग्राम लिख रहा हूं जो एक सरणी में सभी जानकारी प्रदर्शित करता है। इसे ब्रैकेट में सरणी अनुक्रमणिका से शुरू करना है (उदा। [2]) और उन्हें एक-दूसरे के साथ सही गठबंधन करना होगा।printf दाएं एक ब्रैकेट किए गए नंबर को संरेखित करें

अगर यह सिर्फ संख्या था, मुझे पता है आप कर सकते हैं कि:

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

लेकिन यह है कि आसपास कोष्ठक डाल निम्नलिखित उत्पादन

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

देना जब मैं वास्तव में यह चाहते थे:

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

मैं यह करने के बारे में कैसे जा सकता हूं?

उत्तर

8

इसे दो चरणों में करें: पहले अस्थायी बफर में एक गैर-गठबंधन स्ट्रिंग बनाएं, फिर स्ट्रिंग को दाएं-गठबंधन मुद्रित करें।

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

प्रक्रिया दो चरणों में करने के लिए इसे तोड़ने के लिए किया जाएगा करने के लिए एक आसान बात:

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

आप केवल एक लाइन की जरूरत है और कोई अस्थायी चार-बफर:

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

इसे एक आवश्यकता के रूप में नहीं बताया गया था, लेकिन यह केवल तभी काम करता है जब सूचकांक> 0. –

+0

हाँ, समयपूर्व अनुकूलन और ओवर-इंजीनियरिंग सभी तरह से नीचे, आपके कोड को डीबग करने के लिए असंभव बनाते हैं या अब से 6 महीने बनाए रखें। ;-) –

संबंधित मुद्दे