Khuôn dạng nhập dữ liệu

Một phần của tài liệu Bài giảng ngôn ngữ lập trình C (Trang 84 - 86)

/ *g ọi hàm g() biến b được cấp phát

a.Khuôn dạng nhập dữ liệu

Chúng ta đã biết là cần phải dùng các kí tự định dạng như %d, %c, ... để chỉ kiểu dạng dữ liệu nhập. Thực tế xâu định dạng dùng trong hàm scanf() chỉ đơn giản là thể hiện trình tự các loại dữ liệu xuất hiện trên kênh nhập mà thơi. Ví dụ nếu dữ liệu được vào là "abc 123 12.5" có thể được biểu diễn định dạng nhập là "%s%d%f". Khi sử dụng các định dạng nhập cần lưu ý những kí tự nào có thể lấy từ kênh cho mỗi định dạng.

Định dạng nhập Ý nghĩa

%d Lấy một số dạng thập phân, bỏ qua dấu cách hoặc <enter> nếu gặp %x Lấy một số dạng hexa, bỏ qua dấu cách hoặc <enter> nếu gặp %f Lấy một số thực, bỏ qua dấu cách hoặc <enter> nếu gặp

%s Lấy một xâu kí tự trên kênh đến khi gặp dấu trắng hoặc <enter> %c Lấy duy nhất một kí tự

Ví dụ: "%d%f" "123 ffff" Chỉ nhập được 123 "%d%s" "123 ffff" 123 và xâu có một kí tự cách "%d%c%s" "123 ffff" 123, kí tự cách và "ffff" "%d%x" "123 ffff" 123 và 0xffff "%s%d" "ffff 123" "ffff" và 123 b. Khuôn dạng in dữ liệu

Chúng ta cũng đã tìm hiểu về cách tạo khuôn dạng cho dữ liệu in bằng %m hoặc %m.n với m là số ô chữ để in dữ liệu và n là số ô dành cho phần sau dấu chấm của số thực. Sau đây là dạng tổng quát dùng cho việc in dữ liệu.

%[<flag>][<width>][.<prec>]<type>

<flag> có thể dùng một hoặc vài kí tự sau đây theo thứ tự:

- kí tự ‘-’ thể hiện dữ liệu được in căn lề phải, mặc định là được căn lề trái. - kí tự ‘+’ buộc các số ln được in kí tự dấu kèm theo.

<width> có thể là một con số thể hiện cho độ rộng dành ra để in dữ liệu hoặc kí tự ‘*’ thể hiện giá trị độ rộng được lấy trong tham số tiếp theo truyền cho hàm.

<prec> thể hiện số kí tự in cho phần sau dấu chấm của số thực (mặc định là 6). Nếu dung kí tự ‘*’ cho phần này thì giá trị cũng được lấy trong tham số tiếp theo truyền vào cho hàm.

Ví dụ: char * s = "Hello!"; int r = 1, i = 2; printf("%s\n", s); /* in căn phải màn hình */ printf("%80s\n", s); /* in căn trái màn hình 80 cột */ /* để in căn giữa màn hình thì số ô dành cho in là 80-strlen(s)/2 */ printf("%*s\n", s, 80-strlen(s)/2);

printf("%d%+di", r, i); /* in số phức với kết quả in là 1+2i */

BÀI TẬP

Câu 1: Cho các biến dữ liệu

int x, y;

char ch, s[10];

Chỉ ra giá trị của các biến sau mỗi câu lệnh nhập khi dữ liệu nhập là "123^a^456^abc" (với ^ thể hiện cho dấu cách).

a) scanf("%d%c%d%s", &x, &ch, &y, s); b) scanf("%d^%c%d^%s", &x, &ch, &y, s); c) scanf("%d%s%c%d ", &x, s, &ch, &y); d) scanf("%d%c%s%d ", &x, &ch, s, &y); e) scanf("%c%d^%s%d ", &ch, &x, s, &y);

Câu 2: Viết chương trình sử dụng các khn dạng in để in bảng dữ liệu sau trên màn hình: +-----+---------------------------+------+

| STT | Ho va Ten | Điem | +-----+---------------------------+------+

| 1|Ta Tuan Anh | 9| | 2|Nguyen Hoa Binh | 8| | 3|Tran Van Nam | 10| | 4|Do Quoc Tuan | 6| +-----+---------------------------+------+

Một phần của tài liệu Bài giảng ngôn ngữ lập trình C (Trang 84 - 86)