Văn bản căn chỉnh (Justification) trong printf
C cung cấp định dạng rộng (width) và căn chỉnh trong printf để trình bày dữ liệu đẹp, bảng biểu rõ ràng.
Cú pháp cơ bản
%[cờ][độ rộng][.độ chính xác]kiểu
| Ký hiệu | Ý nghĩa |
|---|---|
%10s | Căn phải (right), rộng 10 ký tự |
%-10s | Căn trái (left), rộng 10 ký tự |
%5d | Số nguyên căn phải, rộng 5 |
%-5d | Số nguyên căn trái, rộng 5 |
%10.2f | Số thực căn phải, rộng 10, 2 số thập phân |
Chương trình 1: Căn trái (Left Justification) - Dùng cho bảng
#include <stdio.h>
int main() {
char tenCot1[20] = "Ten", tenCot2[20] = "So tien";
char ten1[20] = "Bhanu", ten2[20] = "Hari", ten3[20] = "Lucky", ten4[20] = "Puppy";
int tien1 = 200, tien2 = 400, tien3 = 250, tien4 = 460;
// %-15s: căn trái, rộng 15 ký tự
printf("%-15s %-15s\n", tenCot1, tenCot2);
printf("%-15s %-15d\n", ten1, tien1);
printf("%-15s %-15d\n", ten2, tien2);
printf("%-15s %-15d\n", ten3, tien3);
printf("%-15s %-15d\n", ten4, tien4);
return 0;
}
Kết quả chương trình 1
Ten So tien
Bhanu 200
Hari 400
Lucky 250
Puppy 460
Chương trình 2: Căn phải (Right Justification) - Mặc định
#include <stdio.h>
int main() {
char tenCot1[20] = "Ten", tenCot2[20] = "So tien";
char ten1[20] = "Bhanu", ten2[20] = "Hari", ten3[20] = "Lucky", ten4[20] = "Puppy";
int tien1 = 200, tien2 = 400, tien3 = 250, tien4 = 460;
// %2s, %5d: căn phải (mặc định)
printf("%2s %2s\n", tenCot1, tenCot2);
printf("%5s %5d\n", ten1, tien1);
printf("%2s %2d\n", ten2, tien2);
printf("%5s %5d\n", ten3, tien3);
printf("%2s %2d\n", ten4, tien4);
return 0;
}
Kết quả chương trình 2
Ten So tien
Bhanu 200
Hari 400
Lucky 250
Puppy 460
So sánh và khi nào dùng cái nào
| Loại dữ liệu | Khuyến nghị | Ví dụ |
|---|---|---|
| Chuỗi (tên, mã...) | Căn trái (%-Ns) | %-20s |
| Số liệu (giá, số lượng...) | Căn phải (%Nd, %N.2f) | %10d, %8.2f |
| Tiêu đề cột | Căn trái cho chuỗi, căn phải cho số | Thống nhất theo dữ liệu cột |
Ví dụ thực tế: Bảng điểm sinh viên
printf("%-5s %-20s %5s %5s %5s %6s\n", "STT", "Ho ten", "Toan", "Ly", "Hoa", "TB");
printf("%-5d %-20s %5d %5d %5d %6.2f\n", 1, "Nguyen Van A", 8, 7, 9, 8.0);
printf("%-5d %-20s %5d %5d %5d %6.2f\n", 2, "Tran Thi B", 9, 8, 7, 8.0);
Kết quả
STT Ho ten Toan Ly Hoa TB
1 Nguyen Van A 8 7 9 8.00
2 Tran Thi B 9 8 7 8.00
Các cờ định dạng hữu ích khác
0: Điền số 0 đầu (%05d→ 00042)+: Luôn hiện dấu (+/-) (%+d→ +42, -5)(space): Dấu dương là space, âm là - (% d→ 42, -5)#: Dạng thay thế (0x cho hex, 0 cho octal, .0 cho float)
Kỹ năng căn chỉnh đầu ra quan trọng cho: báo cáo, log file, giao diện console, xuất dữ liệu CSV/TSV.