Hướng dẫn cách căn lề trong C. Bạn sẽ học được các cách căn trái, căn phải, căn giữa khi xuất dữ liệu trong C sau bài học này.
Cách căn lề trong C
Để căn lề trong C, chúng ta sử dụng các hàm xuất dữ liệu như printf hoặc sprintf/snprintf kèm với các đối số flags
(có tác dụng căn chỉnh, thêm dấu , đệm số 0) và đối số width
(chỉ định độ dài tối thiểu của kết quả xuất).
- Xem thêm: Bốn cách xuất dữ liệu trong C
- Xem thêm: Hàm printf() và cách xuất dữ liệu trong C
Ví dụ:
printf("%4d", 18); // " 18"(Căn phải) |
Bảng các flags thông dụng có thể sử dụng trong hàm xuất dữ liệu trong C như sau:
flags | Tác dụng |
---|---|
- | Căn trái |
+ | Thêm dấu cho số |
0 | Đệm số 0 cho đủ độ dài kết quả xuất |
space | Đệm dấu cách |
Căn lề phải trong C
Để căn lề phải trong C, chúng ta thêm độ dài tối thiểu của kết quả xuất vào đằng sau ký hiệu bắt đầu chuỗi định dạng %
. Độ dài tối thiểu của kết quả xuất được gọi là đối số width
trong hàm xuất dữ liệu trong C.
printf("%4d", 12); // " 12" |
Căn lề trái trong C
Để căn lề trái trong C, ngoài việc thêm độ dài tối thiểu của kết quả xuất vào đằng sau ký hiệu bắt đầu chuỗi định dạng %
thì chúng ta cũng cần thêm cả dấu trừ -
vào đằng sau ký hiệu %
này.
printf("%-4d", 12); // "12 " |
Đệm số 0 vào số trong C
Đệm số 0 vào đầu số trong C
Để đệm số 0 vào đầu số trong C, ngoài việc thêm độ dài tối thiểu của kết quả xuất vào đằng sau ký hiệu bắt đầu chuỗi định dạng %
thì chúng ta cũng cần thêm cả số 0
vào đằng sau ký hiệu %
này.
printf("%04d", 12); // 0012 |
Đệm số 0 vào cuối số trong C
Về mặc định khi dùng hàm printf() kèm flags 0
giống như trên, thì chúng ta chỉ có thể đệm số 0 vào đầu số trong C mà thôi.
Tuy nhiên nếu sử dụng kèm hàm snprintf() để tạo chuỗi kết quả có số 0 được đệm vào cuối số trước khi in nó ra bằng hàm printf(), chúng ta có thể giải quyết được bài toán này.
Ví dụ:
|
Lưu ý khi đệm số 0 vào chuỗi trong C
Chúng ta chỉ có thể đệm số 0 vào số trong C mà thôi. Chúng ta không thể đệm số 0 vào các đối tượng khác, ví dụ như chuỗi chẳng hạn. Mặc dù không xảy ra lỗi, nhưng kết quả hiện về sẽ không bao gồm số 0.
Ví dụ:
printf("%08s", "abc"); //" abc" |
Để giải quyết vấn đề này, chúng ta cần phải chuyển các chữ số này về kiểu số bằng cách dùng các hàm như atoi,atof,atol, rồi mới tiến hành đệm số 0 vào đầu số đó.
Ví dụ:
|
Chỉ định động độ dài tối thiểu của chuỗi kết quả
Như ở phần trên chúng ta đã học được cách chỉ định cố định độ dài tối thiểu của chuỗi kết quả vào đằng sau dấu %
. Tuy nhiên cách này có một số bất cập khi chúng ta muốn thay đổi giá trị của độ dài tối thiểu này.
Khi đó, chúng ta cần dùng tới cách chỉ định động độ dài tối thiểu của chuỗi kết quả, bằng cách gán dấu hoa thị *
vào trước ký hiệu %
, sau đó mới chỉ định giá trị của độ dài tối thiểu của chuỗi kết quả.
Ví dụ:
printf("%*s", 4, "12"); // " 12" |
Chúng ta cũng có thể gán độ dài tối thiểu vào một biến để tiện sử dụng hơn trong chương trình. Ví dụ:
int x = 4; |
Chú ý khi căn lề trong C
Ưu tiên độ dài thực của chuỗi khi in
Khi chỉ định độ dài tối thiểu của chuỗi kết quả, nếu giá trị này nhỏ hơn độ dài thực của chuỗi được in, thì độ dài thực của chuỗi sẽ được ưu tiên.
Ví dụ:
printf("%3d", 1234); // "1234" |
Lưu ý là các dấu cộng trừ trước số cũng được tính trong độ dài chuỗi, và với số thực thì phần số thập phân cũng được bao hàm trong độ dài này.
Ví dụ:
printf("%4d", -12); // " -12" |
Không thể cùng lúc đệm số 0 và căn lề trái
Chúng ta không thể cùng lúc đệm số 0 và căn lề trái trong C được. Khi đó flag 0
sẽ bị bỏ qua, và flag căn lề trái -
sẽ được ưu tiên xử lý.
/*Kết quả không phải là "1200" do flag 0 bị bỏ qua*/ |
Tổng kết
Trên đây Kiyoshi đã hướng dẫn bạn cách căn lề trong C rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.
Và hãy cùng tìm hiểu những kiến thức sâu hơn về C trong các bài học tiếp theo.
URL Link
https://laptrinhcanban.com/c/lap-trinh-c-co-ban/chuoi-string-trong-c/can-le-trong-c/
HOME › lập trình c cơ bản dành cho người mới học lập trình>>12. chuỗi string trong c