1- Giới thiệu
Thao tác nhập xuất dữ liệu trong lập trình C là thao tác xuất dữ liệu ra màn hình và nhập dữ liệu vào từ bàn phím.
Ngôn ngữ lập trình C cung cấp Thư viện nhập xuất chuẩn trong C là
<stdio.h>, do đó các lập trình viên cần khai báo thư viện này trước khi thực hiện việc nhập xuất dữ liệu bằng chỉ thị
#include.<stdio.h> cung cấp cho chúng ta hai hàm nhập và xuất dữ liệu có định dạng:
- printf(): Hàm xuất có định dạng.
- scanf(): Hàm nhập có định dạng.
2. Hàm xuất dữ liệu printf
Trong ngôn ngữ lập trình C11 vẫn sử dụng printf để xuất dữ liệu ra màn hình theo một khuôn dạng dữ liệu nhất định do lập trình viên đưa ra thông qua bộ xuất dữ liệu chuẩn stdout. Dạng tổng quát của hàm printf được quy định theo tài liệu chuẩn ISO IEC 9899 2001 như sau:
#include <stdio.h>
int printf(const char * restrict format, arg1, arg2 …);
Hàm printf thực hiện chuyển kiểu (convert), định dạng (format) và thực hiện in thông tin dựa trên danh sách các đối số
(arg1, arg2...)
- restrict format đóng vai trò điểu kiển, nó là con trỏ kiểu char chứa địa chỉ của một chuỗi điều khiển (Con trỏ kiểu char chính là một string).
- arg1, arg2 … là danh sách các đối chứa các giá trị, các biến hay các biểu thức muốn hiển thị ra màn hình.
- Hàm printf trả về một số int chính là số lượng ký tự được in ra màn hình.
Mô tả chi tiết hàm printf
restrict format : Con trỏ kiểu char chứa chuỗi điều khiển bao gồm 3 loại ký tự sau đây :
- Các ký tự điều khiển : Là các ký tự có mã từ 0 đến 31 và ký tự có mã 137 trong bảng mã ASCII, mỗi ký tự điều khiển xuất hiện thì chức năng điều khiển của ký tự đó sẽ được thực hiện ví dụ printf(“\n”) thì con trỏ màn hình sẽ dịch đến đầu dòng tiếp theo. Bảng sau mô tả một số ký tự điều khiển thường hay dùng trong ngôn ngữ lập trình C.
- Các ký tự hiển thị : là các ký tự còn lại trong bảng mã ASCCII sẽ được hiển thị ra màn hình khi thực hiện ví dụ printf(“Hello world”) sẽ in ra “Hello world”. Ngoài các ký tự thông thường trong lập trình C thường hay phải in các ký tự đặc biệt ra màn hình (Mô tả ở bảng dưới đây)
- Các đặc tả: Dùng để đưa dữ liệu ra màn hình theo một khuôn dạng nào đó. Dữ liệu này nằm trong restrict format. Mỗi đặc tả có cấu trúc tổng quát như sau :
%[-][fw][pp] Kytuchuyendang
- % là để chỉ ra bắt đầu bắt đầu của một đặc tả chứ không phải là ký tự hiển thị
- fw là một số nguyên xác định độ rộng tối đa của trường ra.
- pp là một số nguyên sử dụng khi đối tương ứng là một xâu ký tự hoặc một giá trị kiểu float hay double.
- Kytuchuyendang : Là một dãy kỹ hiệu nó xác định quy tắc chuyển dạng của giá trị cần hiển thị, mỗi kiểu dữ liệu có một ký tự định dạng cho riêng nó. Một số các ký tự chuyển dạng thông dụng như sau :
- Danh sách các đối số arg1, arg2 … : Chứa các giá trị, các biến hoặc các biểu thức muốn hiển thị ra màn hình. Mỗi arg được phân tách nhau bởi dấu phảy.
Hình số 1 : Minh họa hàm printf
3. Hàm nhập dữ liệu scanf
Là hàm được sử dụng để nhập dữ liệu từ bàn phím theo khuôn dạng xác định thông qua dữ liệu nhập chuẩn stdin.
Dạng tổng quát của hàm
scanf được quy định theo tài liệu chuẩn ISO IEC 9899 2001 như sau:
#include <stdio.h>
int scanf(const char * restrict format, arg1, arg2 …);
Tương tự như hàm printf, danh sách tham số
(arg1, arg2 …) của
scanf cũng được phân cách bằng dấu “,”. Tuy nhiên, tham số phải được truyền vào dưới dạng tham chiếu, tức truyền vào địa chỉ của biến.
Tham chiếu của các kiểu dữ liệu cơ bản (primitive data type) như int, float, char, … là & (address-of operator) cùng với tên biến. Đối với các kiểu dữ liệu dẫn xuất (ví dụ như chuỗi ký tự), tham chiếu đơn giản là tên biến.
Chuỗi điều khiển - restrict format
Chuỗi điều khiển của hàm scanf có thể bao gồm những thành phần sau:
- Whitespace character: bao gồm khoảng trắng, ký tự xuống dòng và tab. Hàm scanf sẽ tự động bỏ qua bất kỳ whitespace character nào có mặt trong chuỗi định dạng.
- Lệnh định dạng: có chức năng định dạng dữ liệu nhập vào từ bàn phím. Nó sẽ quyết định nhận lượng dữ liệu bao nhiêu cho biến tương ứng.
- Các ký tự khác: dùng để phân cách các lệnh định dạng. Các ký tự này dùng để nhập vào dữ liệu một cách có định dạng (ví dụ như ngày tháng năm). Khi nhập các bạn bắt buộc phải nhập đúng theo định dạng đó. Do đó chỉ nên sử dụng trong một số trường hợp đơn giản, quen thuộc và phải có chú thích để người sử dụng không bị nhầm lẫn.
Lỗi thường gặp với hàm scanf : Đối với một số lập trình viên mới làm quen lập trình C thường hay quên không truyền tham chiếu vào hàm
scanf. Cách khắc phục là thêm ký tự & trước tên biến.
Ví dụ minh họa
Hình số 2 : Minh họa hàm scanf và printf