Hàm printf() trong C

Hàm printf() trong C có rất nhiều ứng dụng khi lập trình. Dưới đây là những điều bạn cần biết về printf() trong C.

Lập trình hiện đang là một trong số ngành “hot” hiện nay. Chính vì thế, nhu cầu tìm hiểu về các ngôn ngữ lập trình ngày càng nhiều. Nếu mới bắt đầu học lập trình, bạn cần biết hiện có rất nhiều ngôn ngữ để phát triển một ứng dụng, chương trình hay phần mềm. Để tạo thành công một chương trình, bạn cần nắm vững được cách dùng các lệnh, hàm của một ngôn ngữ.

C là một trong số ngôn ngữ lập trình phổ biến và hàm printf của nó được dùng khá nhiều. Trong ngôn ngữ C, hàm printf được dùng để in đầu ra trên màn hình. Hàm này là một phần của thư viện chuẩn C “stdio.h” và nó có thể cho phép định dạng kết quả theo nhiều cách.

Nếu có các định dạng xác định, chúng được thay thế bằng những đối số tương ứng của chúng theo cstring đến lệnh gọi printf. Các chỉ định định dạng này cũng có thể chứa độ dài, độ chính xác và các flag khác.

Khai báo hàm printf() trong C

Dưới đây là phần khai báo cho hàm printf() trong ngôn ngữ lập trình C:

int printf(const char *format, ...)

Tham số hàm printf() trong C

format: Đây là chuỗi chứa text được ghi tới stdout. Nó có thể chứa các thẻ định dạng có thể được nhúng mà được thay thế bởi các giá trị được xác định trong các tham số bổ sung tiếp theo và được định dạng theo yêu cầu. Nguyên mẫu các thẻ định dạng là %[flags][width][.precision][length]specifier, được giải thích như dưới đây:

specifierKết quả
cKý tự
d hoặc iSố nguyên hệ thập phân có dấu
eKý hiệu khoa học (mantissa/exponent) sử dụng ký tự e
EKý hiệu khoa học (mantissa/exponent) sử dụng ký tự E
fSố thực dấu chấm động hệ thập phân
gSử dụng rút gọn của %e hoặc %f
GSử dụng rút gọn của %E hoặc %f
oSố bát phân có dấu
sChuỗi ký tự
uSố nguyên hệ thập phân không dấu
xSố nguyên hệ thập lục phân không dấu
XSố nguyên hệ thập lục phân không dấu (các chữ cái hoa)
pĐịa chỉ con trỏ
nKhông in cái gì
%Ký tự

flagsMô tả
-Căn chỉnh trái vào bên trong độ rộng trường đã cho. Căn chỉnh phải là mặc định
+Ép buộc đặt trước kết quả một dấu cộng hoặc trừ (+ hoặc -) ngay cả với các số dương. Theo mặc định, chỉ có các số âm được đặt trước bởi một dấu -
(space)Nếu không có ký hiệu nào được ghi, thì một khoảng trống sẽ được chèn trước giá trị
#Được sử dụng với các specifier là o, x hoặc X. Giá trị được đặt trước với 0, 0x hoặc 0X tương ứng cho các giá trị khác 0. Sử dụng với e, E và f, nó ép buộc output đã được ghi để thu nhận một con trỏ thập phân ngay cả nếu không có chữ số nào theo sau. Theo mặc định, nếu không có chữ số nào theo sau thì không có con trỏ thập phân được ghi. Sử dụng với g hoặc G, kết quả là giống với e hoặc E nhưng các số 0 ở cuối không bị gỡ bỏ
0Đệm vào bên trái (left-pad) của số với các số 0 thay vì bởi các khoảng trống

widthMô tả
(number)Số ký tự tối thiểu để được in. Nếu giá trị để được in là ngắn hơn số này, thì kết quả được đệm thêm với các khoảng trống. Giá trị không bị cắt ngay cả khi kết quả là quá lớn
*Độ rộng không được xác định trong chuỗi định dạng format, nhưng như một tham số giá trị nguyên bổ sung đặt trước tham số đó mà phải được định dạng

.precisionMô tả
.numberVới các Integer Specifier (d, i, o, u, x, X) − thì Precision xác định số chữ số nhỏ nhất được ghi. Nếu giá trị được ghi là ngắn hơn số này thì kết quả được đệm thêm với các 0 vào đầu. Giá trị không bị cắt ngay cả nếu kết quả là dài hơn. Một precision là 0 nghĩa là không có ký tự nào được ghi cho giá trị 0. Với e, E và f specifier: đây là số chữ số để được in sau điểm thập phân. Với g và G specifier: đây là số chữ số có nghĩa tối đa để được in. Với s specifier: đây là số ký tự tối thiểu để được in. Theo mặc định, tất cả ký tự được in tới khi bắt gặp ký tự null cuối cùng. Với kiểu c: nó không có ảnh hưởng. Khi không có precision nào được xác định, thì mặc định là 1. Nếu period được xác định mà không kèm với một giá trị precision rõ ràng, thì 0 được giả sử
.*Precision không được xác định trong chuỗi định dạng format, nhưng như một tham số giá trị nguyên bổ sung đặt trước tham số đó mà phải được định dạng

lengthMô tả
hTham số được thông dịch như một short int hoặc unsigned short int (chỉ được áp dụng cho integer specifiers: i, d, o, u, x và X)
lTham số được thông dịch như một long int hoặc unsigned long int cho integer specifier (i, d, o, u, x và X), và như một wide char hoặc wide char string cho các specifier là c và s
LTham số được thông dịch như một long double (chỉ được áp dụng cho các floating point specifier: e, E, f, g và G)

Các tham số bổ sung − Phụ thuộc vào chuỗi định dạng format, hàm này có thể có một dãy tham số bổ sung, mỗi tham số chứa một giá trị để được chèn thay cho mỗi %-tag được xác định trong tham số format, nếu có. Số tham số này nên cùng số lượng với số %-tags mà mong chờ một giá trị.

Trả về giá trị:

Nếu thành công, tổng số ký tự đã được ghi sẽ được trả về. Nếu thất bại thì trả về một số âm.

Ví dụ 1:

Chương trình C sau minh họa cách sử dụng của hàm printf() trong C:

#include <stdio.h>

int main ()
{
 int ch;
for( ch = 75 ; ch <= 100; ch++ )
 {
 printf("Gia tri ASCII = %d, Ky tu = %c\n", ch , ch );
 }
return(0);
}

Biên dịch và chạy chương trình C trên sẽ cho kết quả:

Gia tri ASCII = 75, Ky tu = K
Gia tri ASCII = 76, Ky tu = L
Gia tri ASCII = 77, Ky tu = M
Gia tri ASCII = 78, Ky tu = N
Gia tri ASCII = 79, Ky tu = O
Gia tri ASCII = 80, Ky tu = P
Gia tri ASCII = 81, Ky tu = Q
Gia tri ASCII = 82, Ky tu = R
Gia tri ASCII = 83, Ky tu = S
Gia tri ASCII = 84, Ky tu = T
Gia tri ASCII = 85, Ky tu = U
Gia tri ASCII = 86, Ky tu = V
Gia tri ASCII = 87, Ky tu = W
Gia tri ASCII = 88, Ky tu = X
Gia tri ASCII = 89, Ky tu = Y
Gia tri ASCII = 90, Ky tu = Z
Gia tri ASCII = 91, Ky tu = [
Gia tri ASCII = 92, Ky tu = \
Gia tri ASCII = 93, Ky tu = ]
Gia tri ASCII = 94, Ky tu = ^
Gia tri ASCII = 95, Ky tu = _
Gia tri ASCII = 96, Ky tu = `
Gia tri ASCII = 97, Ky tu = a
Gia tri ASCII = 98, Ky tu = b
Gia tri ASCII = 99, Ky tu = c
Gia tri ASCII = 100, Ky tu = d

Ví dụ 2:

Để xuất giá trị hoặc in text trong C, đây là một ví dụ đơn giản về cách dùng hàm printf():

#include <stdio.h>

int main() {
printf("Hello World!");
return 0;
}

Bạn có thể dùng nhiều hàm printf() như ý muốn. Tuy nhiên, lưu ý rằng nó không chèn một dòng mới vào cuối của output:

#include <stdio.h>

int main() {
printf("Xin chào bạn tới Quantrimang.com.");
printf("Cùng nhau học C nhé!");
return 0;
}

Lồng các printf trong C

Bạn có thể lồng printf trong printf khi lập trình bằng ngôn ngữ C. Ví dụ, dự đoán kết quả của chương trình C sau với printf bên trong printf.

#include<stdio.h>

int main()
{
int x = 1987;
printf("%d", printf("%d", printf("%d", x)));
return(0);
}

Kết quả:

198741

Giải thích chi tiết:

Đầu tiên, printf trong cùng được chạy nên kết quả in bạn nhận được là 1987.

Print trả về về tổng số chữ số trong năm 1987 tức là 4. printf() trả về số ký tự được in thành công trên màn hình. Toàn bộ lệnh giảm xuống:

printf("%d", printf("%d", 4));

Printf thứ hai sau đó in 4 và trả về tổng số chữ số trong 4. Ví dụ: 1 (4 là số chữ số đơn lẻ).
Cuối cùng, toàn bộ lệnh chỉ đơn giản là giảm xuống:

printf("%d", 1);

Nó chỉ in 1 và kết quả sẽ là: 198741

Vì thế, khi nhiều printf xuất hiện bên trong một printf khác, printf bên trong sẽ in đầu ra của nó và trả về độ dài của chuỗi được in trên màn hình cho printf bên ngoài.

Tóm lại, trong lập trình ngôn ngữ C, hàm printf() được dùng để in (“ký tự, chuỗi, giá trị float, số nguyên, bát phân và thập lục phân”) lên màn hình đầu ra.

  • Hàm printf() với định dạng %d để hiển thị giá trị của một biến số nguyên.
  • Tương tự, %c được sử dụng để hiển thị ký tự, %f cho biến float, %s cho biến chuỗi, %lf cho biến kép và %x cho biến thập lục phân.
  • Để tạo một dòng mới, chúng ta sử dụng câu lệnh “\n” trong C printf().
Thứ Bảy, 22/07/2023 10:32
4,312 👨 81.848
1 Bình luận
Sắp xếp theo
  • Trọng Nguyễn Phan Minh
    Trọng Nguyễn Phan Minh

    Có cách nào để mình in giá trị mới thì giá trị cũ sẽ ghi đè lên giá trị mới mà ko cần in lại dòng đó lần nữa ko ad

    Thích Phản hồi 21:53 10/05
    ❖ Lập trình C