Bài 4 Nhập và Xuất tron gC Mục tiêu:
4.3 Bộ nhớ đệm Nhập và Xuất (Buffered I/O)
Ngơn ngữ C bản thân nó khơng định nghĩa các thao tác nhập và xuất. Tất cả thao tác nhập và xuất được thực hiện bởi các hàm có sẵn trong thư viện hàm của C. Thư viện hàm C chứa một hệ thống hàm riêng mà nó điều khiển các thao tác này. Ðó là:
• Bộ nhớ đệm Nhập và Xuất – được dùng để đọc và viết các ký tự ASCII
Một vùng đệm là nơi lưu trữ tạm thời, nằm trên bộ nhớ máy tính hoặc trên thẻ nhớ của bộ điều khiển thiết bị (controller card). Các ký tự nhập vào từ bàn phím được đưa vào bộ nhớ và đợi đến khi người dùng nhấn phím return hay enter thì chúng sẽ được thu nhận như một khối và cung cấp cho chương trình.
Bộ nhớ đệm nhập và xuất có thể được phân thành: Thiết bị nhập/xuất chuẩn (Console I/O) Tập tin đệm nhập/xuất (Buffered File I/O)
Thiết bị nhập/xuất chuẩn liên quan đến những hoạt động của bàn phím và màn hình của máy
tính. Tập tin đệm nhập/xuất liên quan đến những hoạt động thực hiện đọc và viết dữ liệu vào tập tin. Chúng ta sẽ nói về Thiết bị nhập/xuất.
Trong C, Thiết bị nhập/xuất chuẩn là một thiết bị luồng. Các hàm trong Thiết bị nhập/xuất chuẩn hướng các thao tác đến thiết bị nhập và xuất chuẩn của hệ thống.
getchar() – Ðọc một và chỉ một ký tự từ bàn phím.
putchar() – Xuất một ký tự đơn ra màn hình. 4.3.1 getchar()
Hàm getchar() được dùng để đọc dữ liệu nhập vào, chỉ một ký tự tại một thời điểm từ bàn phím.Trong hầu hết việc thực thi của C, khi dùng getchar(), các ký tự nằm trong vùng đệm cho đến khi người dùng nhấn phím xuống dịng. Vì vậy nó sẽ đợi cho đến khi phím Enter được gõ. Hàm getchar() khơng có tham số, nhưng vẫn phải có cặp dấu ngoặc đơn. Nó đơn giản lấy về ký tự tiếp theo và sẵn sàng đưa ra cho chương trình. Chúng ta nói rằng hàm này trả về một giá trị có kiểu ký tự.
Chương trình sau trình bày cách dùng hàm getchar().
Ví dụ 4.11:
/* Chương trình trình bày cách dùng getchar() */ #include <stdio.h>
int main() {
char letter;
printf(“\nPlease enter any character: “); letter = getchar();
printf(“\nThe character entered by you is %c. “, letter); }
Kết quả như sau:
Please enter any character: S The character entered by you is S.
Trong chương trình trên ‘letter’ là một biến được khai báo là kiểu char do vậy nó sẽ nhận vào ký
tự.
Một thơng báo:
Please enter any character:
sẽ xuất hiện trên màn hình. Ta nhập vào một ký tự, trong ví dụ là S, qua bàn phím và nhấn Enter. Hàm getchar() nhận ký tự đó và gán cho biến có tên là letter. Sau đó nó được hiển thị trên màn hình và ta có được thơng báo.
The character entered by you is S.
putchar() là hàm xuất ký tự trong C, nó sẽ xuất một ký tự lên màn hình tại vị trí con trỏ màn hình.
Hàm này yêu cầu một tham số. Tham số của hàm putchar() có thể thuộc các loại sau: • Hằng ký tự đơn
• Ðịnh dạng (Escape sequence) • Một biến ký tự.
Nếu tham số là một hằng nó phải được bao đóng trong dấu nháy đơn. Bảng 6.5 trình bày vài tùy chọn cho putchar() và tác động của chúng.
Tham số Hàm Tác dụng
Biến ký tự putchar(c) Hiện thị nội dung của
biến ký tự c
Hằng biến ký tự putchar(‘A’) Hiển thị ký tự A
Hằng số putchar(‘5’) Hiển thị con số 5
Ðịnh dạng (escape sequence)
putchar(‘\t’) Chèn một ký tự khoảng cách (tab) tại vị trí con trỏ màn hình
Ðịnh dạng (escape sequence)
putchar(‘\n’) Chèn một mã xuống dịng tại vị trí con trỏ màn hình
Bảng 6.5: Những tùy chọn cho putchar() và tác dụng của chúng
Ví dụ 4.12:
/* Chương trình này trình bày việc sử dụng hằng và định dạng trong hàm putchar() */ #include <stdio.h> int main() { putchar(‘H’); putchar(‘\n’); putchar(‘\t’); putchar(‘E’); putchar(‘\n’); putchar(‘\t’); putchar(‘\t’); putchar(‘L’); putchar(‘\n’);
putchar(‘\t’); putchar(‘\t’); putchar(‘\t’); putchar(‘L’); putchar(‘\n’);
putchar(‘\t’); putchar(‘\t’); putchar(‘\t’); putchar(‘\t’);
putchar(‘O’); }
Kết quả như sau: H
E
L
L
O
Khác nhau giữa getchar() và putchar() là putchar() yêu cầu một tham số trong khi getchar() thì khơng.
Ví dụ 4.13:
/* Chương trình trình bày getchar() và putchar() */ #include <stdio.h>
int main() {
char letter;
printf(“You can enter a character now: ”); letter = getchar();
putchar(letter); }
Kết quả như sau:
You can enter a character now: F F
Trong C, Nhập và Xuất được thực hiện bằng cách dùng các hàm. Bất cứ chương trình nào trong C đều có quyền truy cập tới ba tập tin chuẩn. Chúng là tập tin nhập chuẩn (stdin), tập
tin xuất chuẩn (stdout) và bộ lỗi chuẩn (stderr). Thông thường tập tin nhập chuẩn là bàn phím (keyboard), tập tin xuất chuẩn là màn hình (screen) và tập tin lỗi chuẩn cũng là màn hình.
Tập tin tiêu đề <stdio.h> chứa các macro của nhiều hàm nhập và xuất (input/outputfunction) được dùng trong C. function) được dùng trong C.
Thiết bị nhập/xuất chuẩn (Console I/O) liên quan đến những hoạt động của bàn phím và
màn hình của máy tính. Nó chứa các hàm định dạng và không định dạng. Hàm nhập xuất định dạng là printf() và scanf().
Hàm nhập xuất không định dạng là getchar() và putchar().
Hàm scanf() được dùng cho dữ liệu nhập vào có định dạng, trong khi hàm printf() được dùng để xuất ra dữ liệu theo một định dạng cụ thể.
Chuỗi điều khiển của printf() và scanf() phải luôn tồn tại bên trong dấu nháy kép “”. Chuỗi này sẽ chứa một tập các lệnh định dạng. Mỗi lệnh định dạng chứa ký hiệu %, một tùy chọn
các bổ từ và các dạng kiểu dữ liệu xác định.
Sự khác nhau chính giữa printf() và scanf() là hàm scanf() dùng địa chỉ của biến chứ không phải là tên biến.
Hàm getchar() đọc một ký tự từ bàn phím. Hàm putchar(ch) gởi ký tự ch ra màn hình.
Sự khác nhau giữa getchar() và putchar() là putchar() có một tham số trong khi getchar() thì khơng.
Bài tập tự làm
1. A. Hãy dùng câu lệnh printf() để :
a) Xuất ra giá trị của biến số nguyên sum.
b) Xuất ra chuỗi văn bản "Welcome", tiếp theo là một dòng mới. c) Xuất ra biến ký tự letter.
d) Xuất ra biến số thực discount.
e) Xuất ra biến số thực dump có 2 vị trí phần thập phân. 1. B. Dùng câu lệnh scanf() và thực hiện:
a) Ðọc giá trị thập phân từ bàn phím vào biến số nguyên sum. b) Ðọc một giá trị số thực vào biến discount_rate.
2 Viết một chương trình xuất ra giá trị ASCII của các ký tự ‘A’ và ‘b’. 3. Xét chương trình sau:
#include <stdio.h> int main()
{
int breadth;
float length, height;
scanf(“%d%f%6.2f”, breadth, &length, height); printf(“%d %f %e”, &breadth, length, height); }
Sửa lỗi chương trình trên.
4. Viết một chương trình nhập vào name, basic, daper (phần trăm của D.A), bonper (phần trăm lợi tức) và loandet (tiền vay bị khấu trừ) cho một nhân viên. Tính lương như sau:
salary = basic + basic * daper/100 + bonper * basic/100- loandet - loandet
Bảng dữ liệu:
name basic daper bonper loandet
MARK 2500 55 33.33 250.00
Tính salary và xuất ra kết quả dưới các đầu đề sau (Lương được in ra gần dấu đơla ($)):
Viết một chương trình yêu cầu nhập vào tên, họ của bạn và sau đó xuất ra tên, họ theo dạng là họ, tên.