2011-08-18 26 views
41

Để xác định kích thước của cột bằng ngôn ngữ C, chúng tôi sử dụng %<number>d. Ví dụ: tôi có thể nhập %3d và nó sẽ cho tôi một cột có chiều rộng = 3. Vấn đề của tôi là số của tôi sau % là một biến mà tôi nhận được, vì vậy tôi cần một cái gì đó như %xd (trong đó x là biến số nguyên mà tôi nhận được trước đó trong chương trình của mình). Nhưng nó không hoạt động.Đặt chiều rộng cột văn bản biến trong printf

Có cách nào khác để thực hiện việc này không?

+3

Nói chung, thay vì "không làm việc", bạn nên sao chép-dán thông báo lỗi chính xác mà bạn nhận được. –

Trả lời

64

Bạn có thể làm điều này như sau:

Từ comment Lee:
Bạn cũng có thể sử dụng một * cho kích thước chính xác:

printf("%*.*f", width, precision, value); 
+11

Bạn cũng có thể sử dụng * cho kích thước chính xác: 'printf ('% *. * F', chiều rộng, độ chính xác, giá trị);' –

+0

Tuyệt vời, không biết cấu trúc đó! –

+0

Đó phải là '"% * d "' –

5

Chỉ cần cho đầy đủ, muốn đề cập đến với phiên bản tuân thủ POSIX của printf() bạn cũng có thể đặt giá trị trường rộng (hoặc độ chính xác) thực tế ở một nơi khác trong danh sách tham số và tham chiếu đến nó bằng cách sử dụng số tham số 1 theo sau là ký hiệu đô la:

Độ rộng hoặc độ chính xác của trường hoặc cả hai, có thể được biểu thị bằng dấu hoa thị '∗' hoặc dấu hoa thị theo sau một hoặc nhiều chữ số thập phân và ‘$’ thay cho chuỗi chữ số. Trong trường hợp này, một đối số int cung cấp chiều rộng hoặc độ chính xác của trường. Độ rộng trường âm được coi là cờ điều chỉnh trái theo sau là chiều rộng trường dương; độ chính xác âm được coi như là thiếu. Nếu một chỉ thị định dạng kết hợp các đối số vị trí (nn $) và không có vị trí, kết quả là không xác định.

Ví dụ: printf ("%1$*d", width, value);

+1

Ví dụ của bạn không phù hợp với ngôn ngữ. Nó phải là '"% * 1 $ d "' –

+0

Hơn nữa, bạn nên xác định cả hai đối số bằng phương thức 'n $', như sau: 'printf ("% 2 $ * 1 $ d ", width, value);' . –

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