2012-09-03 35 views
5

Tôi đang viết chương trình hiển thị tất cả thông tin trong một mảng. Nó phải bắt đầu với chỉ mục mảng trong dấu ngoặc đơn (ví dụ: [2]) và chúng phải được căn phải với nhau.printf phải căn chỉnh số được đóng khung

nếu đó chỉ là số, tôi biết rằng bạn có thể làm:

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

nhưng đặt dấu ngoặc xung quanh đó sẽ cung cấp cho các đầu ra sau đây

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

khi tôi thực sự muốn nó được:

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

Tôi làm cách nào để thực hiện việc này?

Trả lời

8

Thực hiện theo hai bước: trước tiên hãy tạo chuỗi không được căn chỉnh trong bộ đệm tạm thời, sau đó in chuỗi căn phải.

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

Một điều dễ dàng để làm sẽ là để phá vỡ nó xuống đến một quá trình hai bước:

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

bạn chỉ cần một dòng và không tạm char-đệm:

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

Nó không được tuyên bố là một yêu cầu, nhưng điều này chỉ hoạt động nếu chỉ số> 0. –

+0

Vâng, tối ưu hóa sớm và over-kỹ thuật tất cả các con đường xuống, làm cho mã của bạn không thể gỡ lỗi hoặc duy trì 6 tháng kể từ bây giờ. ;-) –

Các vấn đề liên quan