Các %*d
trong một printf
cho phép bạn sử dụng một biến để điều chỉnh độ rộng lĩnh vực, dọc theo dòng:
int wid = 4;
printf ("%*d\n", wid, 42);
mà sẽ cung cấp cho bạn:
..42
(với mỗi người 0.123.ký tự là không gian). *
tiêu thụ một đối số wid
và d
tiêu thụ 42
.
Các hình thức bạn có, như:
printf ("%*d %*d\n", a, b);
là hành vi không xác định theo tiêu chuẩn, kể từ khi bạn cần phải cung cấp Bốn lập luận sau chuỗi định dạng, không phải là hai (và trình biên dịch tốt như gcc
sẽ cho bạn về điều này nếu bạn tăng mức cảnh báo). Từ C11 7.20.6 Formatted input/output functions
:
Nếu không có đủ đối số cho định dạng, hành vi không xác định.
Nó phải là một cái gì đó như:
printf ("%*d %*d\n", 4, a, 4, b);
Và lý do bạn nhận được đầu ra kỳ lạ là do rằng hành vi không xác định. This excellent answer cho bạn thấy những thứ có thể sai (và tại sao) khi bạn không tuân thủ các quy tắc, đặc biệt là liên quan đến tình huống này.
Bây giờ, tôi không ngờ đây là vấn đề không chính xác vì bạn đang sử dụng int
cho tất cả các loại dữ liệu, như với tất cả các hành vi chưa xác định, mọi thứ.
Trông giống như trình chỉ định độ rộng: http://www.cplusplus.com/reference/clibrary/cstdio/printf/ – Mysticial
@Mysticial Bạn nên viết câu trả lời đó là – Ben
@Ben, nó chỉ là một liên kết - mà không không đủ điều kiện làm câu trả lời. Tôi quá lười biếng để mở rộng nó ... – Mysticial